W
wuzhonglinquan
Unregistered / Unconfirmed
GUEST, unregistred user!
我用DLL调用窗体,但是窗体里的数据库控件要连接ADOConn的.
我采用了两种方法:
(一):直接把主程序中的ADOconnection通过函数传递过去.
如:
procedure TMainForm.N50Click(Sender: TObject);
var
hdll:THandle;
ShowMdll:TShowMdll;
begin
hdll:=LoadLibrary(PChar(ExtractFilePath(ParamStr(0))+'TLD/TLDForms.dll'));
if hdll<>0 then
begin
@ShowMdll:=GetProcAddress(hdll,'ShowTLDForm');
if @ShowMdll<>nil then
ShowMdll(handle,DMform.ADOCon);//把ADOConnection作为参数传递到DLL里面.
end;
end;
这个方法我测试成功了.
第二种方法:我想在DLL中建立数据模块(DataModel),在这里里面放一个ADoConnection,连接到数据库.
我在主程序里调用 if @ShowMdll<>nil then
ShowMdll(handle);//把ADOConnection不作为参数传递到DLL里面了.
程序的执行结果是DLL里面的窗体成果调出,但是释放的时候(就是关闭窗体的时候)总是报错,不知道为什么?
我的猜想是,就是在DLL里面的dataModule模块没有被释放的缘故? 我现在想用第二种方法,希望谁能指点一下?要怎么做?
我采用了两种方法:
(一):直接把主程序中的ADOconnection通过函数传递过去.
如:
procedure TMainForm.N50Click(Sender: TObject);
var
hdll:THandle;
ShowMdll:TShowMdll;
begin
hdll:=LoadLibrary(PChar(ExtractFilePath(ParamStr(0))+'TLD/TLDForms.dll'));
if hdll<>0 then
begin
@ShowMdll:=GetProcAddress(hdll,'ShowTLDForm');
if @ShowMdll<>nil then
ShowMdll(handle,DMform.ADOCon);//把ADOConnection作为参数传递到DLL里面.
end;
end;
这个方法我测试成功了.
第二种方法:我想在DLL中建立数据模块(DataModel),在这里里面放一个ADoConnection,连接到数据库.
我在主程序里调用 if @ShowMdll<>nil then
ShowMdll(handle);//把ADOConnection不作为参数传递到DLL里面了.
程序的执行结果是DLL里面的窗体成果调出,但是释放的时候(就是关闭窗体的时候)总是报错,不知道为什么?
我的猜想是,就是在DLL里面的dataModule模块没有被释放的缘故? 我现在想用第二种方法,希望谁能指点一下?要怎么做?