唐 唐佐平 Unregistered / Unconfirmed GUEST, unregistred user! 2006-09-14 #21 加载DLL DllHandle := LoadLibrary('test.dll'); 释放DLL FreeLibrary(DllHandle);
S ssjyr Unregistered / Unconfirmed GUEST, unregistred user! 2006-09-14 #23 分数我会给大家的,我是诚心来请教大家的,希望能够集思广议,因为我们这些程序员就是因为交流的太少,或者说太保守了,所以自己也不能得到成长.您说是吗?
C cyxt6034 Unregistered / Unconfirmed GUEST, unregistred user! 2006-09-14 #25 我用的方法是,从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中向主程序传递一个消息,然后根据消息的代码来判断要卸载那一个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;
S ssjyr Unregistered / Unconfirmed GUEST, unregistred user! 2006-09-14 #27 是啊,怎么从DLL中返回消息呢?可否再具体一点,我没有写过相关的程序哎,可否就针对我的程序来弄
J jimzhao Unregistered / Unconfirmed GUEST, unregistred user! 2006-09-14 #28 看一下Delphi2006的帮助文档,里边有关于dll中初始化和退出时的说明。
S ssjyr Unregistered / Unconfirmed GUEST, unregistred user! 2006-09-19 #29 用消息的方式确实可以,不过要用PostMessage好象会好一点哦,从<<Delphi6从入门到精通>>当中得到一些启发,谢谢各位的答复.
G GameSprite Unregistered / Unconfirmed GUEST, unregistred user! 2006-11-05 #30 在 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不会出错
在 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不会出错