Форум: "Основная";
Текущий архив: 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.046 c