Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2007.02.18;
Скачать: [xml.tar.bz2];

Вниз

Как из библиотеки передать списки (TList)?   Найти похожие ветки 

 
sutyt   (2006-12-27 16:05) [0]

Доброго дня мастера. Прежде всего - ВСЕХ с наступающим Новым Годом!!!  Желаю крепкого здоровья, много счастья и любви, и побольше творчесских успехов!!!
Вызываю функцию из длл, которая показывает окно прогресса, но главное - это передача выходных параметров типа TList.
ДЛЛ:
 function CompileTGStatistic(AHandle:THandle;AFileName:PChar;
   var MainList:TList;var DetailList:TList;var Done:boolean):LongInt;stdcall;

impl-ion
function CompileTGStatistic(AHandle:THandle;AFileName:PChar;
 var MainList:TList;var DetailList:TList;var Done:boolean):LongInt;
{var
 PostProcFm:TPostProcFm;}

begin
Application.Handle:=AHandle;
PostProcFm:=TPostProcFm.Create(Application);
Result:=LongInt(PostProcFm);
with PostProcFm do
begin
 GlobalCancel:=false;
 Button2.Enabled:=false;
end;
 MainList:=TList.Create;
 DetailList:=TList.Create;
 PostProcFm.Show;
 PostProcFm.TGCompiling(StrPas(AFileName));
 with PostProcFm do begin
   if ResultMasterList<>nil then
   begin
     MainList.Capacity:=ResultMasterList.Count;
     MainList.Assign(ResultMasterList);
   end else
       MainList:=nil;
   if ResultDetailList<>nil then
   begin
     DetailList.Capacity:=ResultDetailList.Capacity;
     DetailList.Assign(ResultDetailList);
   end else
       DetailList:=nil;
   if (DetailList.Count=0)or(MasterList.Count=0) then Done:=false
     else
       Done:=true;
 end;
end;
Проверял по брекпоинтам - списки заполнены (MasterList=38, DetailList=1296)

главная прога:
type
 TCompileTGStatistic=function(AHandle:THandle;AFileName:PChar;
   var MainList:TList;var DetailList:TList;var Done:boolean):LongInt;stdcall;
...
procedure TMainFm.Button2Click(Sender: TObject);
var
 CompileTGStatistic:TCompileTGStatistic;
 LibHandle:THandle;
 MasterList:TList;
 RDetailList:TList;
 FFileName:string;
 FormRef:LongInt;
 ADone:boolean;
begin
if Opn1.Execute then
begin
FFileName:=Opn1.FileName;
LibHandle:=LoadLibrary("TgcompProc.dll");
try
 if LibHandle=0 then
   begin
     Raise Exception.Create("Unable to load TgcompProc.dll");
     exit;
   end;
 @CompileTGStatistic:=GetProcAddress(LibHandle,"CompileTGStatistic");
 if not(@CompileTGStatistic=nil)then
 begin
   MasterList:=TList.Create;
   RDetailList:=TList.Create;
   FormRef:=CompileTGStatistic(Application.Handle,PChar(FFileName),MasterList,RDeta ilList,ADone);
   if ADone then
   begin
     ShowMessage("MasterList:"+IntToStr(MasterList.Count)+#13#10+
       "DetailList:"+IntToStr(RDetailList.Count))
   end else
       ShowMessage("Fatal Error");
 end else
   RaiseLastWin32Error;
finally
 FreeLibrary(LibHandle);
end;
end;//if Opn1.execute;
end;
Так вот - MasterList=38 а RDetailList=0!!!!
Что я не так делаю???


 
Джо ©   (2006-12-27 18:30) [1]

ShareMem используешь, как дедушка Борланд завещал?


 
sutyt   (2006-12-27 18:38) [2]

>Джо[1]
Нет. Но первый то передается!


 
Джо ©   (2006-12-27 18:39) [3]

> [2] sutyt   (27.12.06 18:38)
> >Джо[1]
> Нет.


А нужно.


 
sutyt   (2006-12-27 18:47) [4]

>[3]Джо ©   (27.12.06 18:39)
Не помогло, а при закрытии формы из длл - вообще заглючило...


 
Германн ©   (2006-12-27 19:05) [5]


> Не помогло

А как делал?


 
sutyt   (2006-12-28 09:41) [6]

>All
у меня в приватах длл-ки и в описании ф-ии были одинаковые имена.
 private
   { Private declarations }
   MasterData:PGeneralData;
   DetailData:PDetailData;
   Addon:PAdditionalData;
   ResultMasterData:PResultMasterData;
   FindList:TList;
   FindData:PFindData;
   ResultMasterList:TList;
   ResultDetailList:TList;
   MasterList:TList;
   DetailList:TList;    
  AddonList:TList;
   ComposeData:PComposeData;

 function CompileTGStatistic(AHandle:THandle;AFileName:PChar;
   var MainList:TList;var DetalList:TList;var Done:boolean):LongInt;stdcall;

теперь все ОК, и без глючного ШареМем!


 
sutyt   (2006-12-28 09:42) [7]

в [6] уже исправлено, но было одинаково.


 
Сергей М. ©   (2006-12-28 10:13) [8]


> function CompileTGStatistic(AHandle:THandle;AFileName:PChar;
>
>    var MainList:TList;var DetalList:TList;var Done:boolean):
> LongInt;stdcall;
>


Выделенное жирным - лишнее.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2007.02.18;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.04 c
15-1170150334
legat
2007-01-30 12:45
2007.02.18
Ручная вставка в TDBGridEh


15-1169854412
vasIzmax
2007-01-27 02:33
2007.02.18
О работе с датой


15-1169630540
Andre_s
2007-01-24 12:22
2007.02.18
Win XP


2-1170190894
Marker
2007-01-31 00:01
2007.02.18
Цветные строки в TMemo


2-1170321620
Sour Smile
2007-02-01 12:20
2007.02.18
Как узнать идентификатор материнской платы?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский