主程序使用完dll中窗体后如何释放,请各位高手帮忙分析一下(200分)

  • 主题发起人 主题发起人 ssjyr
  • 开始时间 开始时间
加载DLL
DllHandle := LoadLibrary('test.dll');
释放DLL
FreeLibrary(DllHandle);
 
大富翁们,不要只顾着说,要把程序作了测试再发表
 
分数我会给大家的,我是诚心来请教大家的,希望能够集思广议,因为我们这些程序员就是因为交流的太少,或者说太保守了,所以自己也不能得到成长.您说是吗?
 
关注!
我也想知道怎么调用非模态窗体
 
我用的方法是,从dll中向主程序传递一个消息,然后根据消息的代码来判断要卸载那一个dll。
// procedure WM_DLLFree(var Message: TMessage)
message WM_DLLFree;

procedure TfrmClient.WM_DLLFree(var Message: TMessage);
begin
//Message.WParam传递,读取调用的DLL的相关信息
if LongInt(FreeLibrary(GetModuleHandle(PChar(TempStr.Strings[1]))))>0 then
MessageBeep(0);//ADllPathAndName字段;DLL的路径和名称 end;
end;
 
楼上的说的对啊
 
是啊,怎么从DLL中返回消息呢?可否再具体一点,我没有写过相关的程序哎,可否就针对我的程序来弄
 
看一下Delphi2006的帮助文档,里边有关于dll中初始化和退出时的说明。
 
用消息的方式确实可以,不过要用PostMessage好象会好一点哦,从<<Delphi6从入门到精通>>当中得到一些启发,谢谢各位的答复.
 
在 project2.dll 的 TForm2.FormClose加入下面几句,当Form2关闭时自动释放DLL, 测试通过.

procedure TForm2.FormClose(Sender: TObject
var Action: TCloseAction);
var
dwThreadId: DWord;
hThread: THandle;
begin
Action:= caFree;
hThread := CreateThread(nil, 0, @FreeLibrary, Pointer(HInstance), 0, dwThreadId);
CloseHandle(hThread);
end;

在DLL里加载了FORM,如果没有先释放FORM而先释放DLL就会出错的.顺便问下怎样才能在一个线程中释放其他线程的FORM不会出错
 
自己加载,自己释放。
 

Similar threads

I
回复
0
查看
650
import
I
D
回复
0
查看
844
DelphiTeacher的专栏
D
D
回复
0
查看
795
DelphiTeacher的专栏
D
后退
顶部