C
cnhotel
Unregistered / Unconfirmed
GUEST, unregistred user!
目标:调用dll中的窗体显示
Dll:
function ShowCgGysForm(AHandle:THandle):boolean;
begin
Result := True;
try
CoInitialize(nil);
Application.Handle:=AHandle;//挂靠到主程序容器中
dm:=Tdm.Create(Application);
cggysgl_f := Tcggysgl_f.Create(Application);
try
cggysgl_f.ShowModal;
except
on e:exception do
begin
cggysgl_f.Free;
dm.Free;
end;
end;
except
Result:=False;
end;
end;
主程序中这样调用:
var
ShowCgGysForm: TShowCgGysForm;
TmpHandle:THandle;//句柄
begin
try
begin
TmpHandle:=LoadLibrary('stock.dll');
if TmpHandle<32 then
begin
Messagebox(Handle,'没有找到附带DLL文件,请确认程序是否完整!','加载DLL失败',MB_OK+MB_ICONEXCLAMATION);
Exit;
end ;
@ShowCgGysForm:=GetProcAddress(TmpHandle,'ShowCgGysForm') ;
if @ShowCgGysForm<>nil then
try
ShowCgGysForm(Application.Handle);//DLL中的窗口创建在应用程序中
except
raise Exception.Create('加载DLL失败');
end;
end;
finally
FreeLibrary(TmpHandle);
//上面这样写关闭的时候产生异常.没有正常释放stock.dll?
//改成: FreeLibrary(Application.Handle);
//这样不出错,奇怪了,看到很多例子上都是写的FreeLibrary(TmpHandle);
//有人提示问题可能出在 Dll的Application.Handle与应用程序的Application.Handle 的引用上.
//导致在我需要在主程序关闭时多一道手续检测dll释放(麻烦):
// if HandleCall<>0 then
begin
FreeLibrary(HandleCall);
HandleCall:=0;
end;
end;
end;
请大家帮看看什么原因,好多例子上释放dll的时候都是写的FreeLibrary(TmpHandle);
为什么我那样写就出错,非要换成FreeLibrary(Application.Handle);
Dll:
function ShowCgGysForm(AHandle:THandle):boolean;
begin
Result := True;
try
CoInitialize(nil);
Application.Handle:=AHandle;//挂靠到主程序容器中
dm:=Tdm.Create(Application);
cggysgl_f := Tcggysgl_f.Create(Application);
try
cggysgl_f.ShowModal;
except
on e:exception do
begin
cggysgl_f.Free;
dm.Free;
end;
end;
except
Result:=False;
end;
end;
主程序中这样调用:
var
ShowCgGysForm: TShowCgGysForm;
TmpHandle:THandle;//句柄
begin
try
begin
TmpHandle:=LoadLibrary('stock.dll');
if TmpHandle<32 then
begin
Messagebox(Handle,'没有找到附带DLL文件,请确认程序是否完整!','加载DLL失败',MB_OK+MB_ICONEXCLAMATION);
Exit;
end ;
@ShowCgGysForm:=GetProcAddress(TmpHandle,'ShowCgGysForm') ;
if @ShowCgGysForm<>nil then
try
ShowCgGysForm(Application.Handle);//DLL中的窗口创建在应用程序中
except
raise Exception.Create('加载DLL失败');
end;
end;
finally
FreeLibrary(TmpHandle);
//上面这样写关闭的时候产生异常.没有正常释放stock.dll?
//改成: FreeLibrary(Application.Handle);
//这样不出错,奇怪了,看到很多例子上都是写的FreeLibrary(TmpHandle);
//有人提示问题可能出在 Dll的Application.Handle与应用程序的Application.Handle 的引用上.
//导致在我需要在主程序关闭时多一道手续检测dll释放(麻烦):
// if HandleCall<>0 then
begin
FreeLibrary(HandleCall);
HandleCall:=0;
end;
end;
end;
请大家帮看看什么原因,好多例子上释放dll的时候都是写的FreeLibrary(TmpHandle);
为什么我那样写就出错,非要换成FreeLibrary(Application.Handle);