dll的释放问题(100分)

  • 主题发起人 主题发起人 yexiangdong
  • 开始时间 开始时间
Y

yexiangdong

Unregistered / Unconfirmed
GUEST, unregistred user!
dll中有个无模式窗体,如何在关闭该窗体时释放该DLL。即用户单击窗体上的DLL按钮,或窗体上的X.
 
你可以在DLL中建立此窗体时:<br>Form := TXXXForm.Create(nil);<br>Form.ShowModal ;<br>然后在主程序释放此DLL
 
樓上的<br>人家是說无模式窗体!<br>您要在關閉窗體的時候釋放DLL可以從DLL中引出類來做.<br>我現在也在做這個,可以在QQ上聊聊<br>我的OICQ:12985224
 
你可以在窗体的OnClose事件中,给Dll发出一个窗体关闭的消息,然后再这个消息中处理,但发出消息一定要用PostMessage
 
当用户关闭Dll中的无模式窗体时,发送自定义信息给主程序:<br>procedure TForm1.FormDestroy(Sender: TObject);<br>begin<br>&nbsp; SendMessage(hMainHandle, WM_USER + 101, 0, 0);<br>end;<br>在主程序中处理该自定义信息:<br>procedure DLLFormCloseMsg(var Message: TMessage); message WM_USER+101;<br>但有个问题:不能在该事件中释放动态库,因为这时窗口资源还没有释放完成,我认为可以在一个Timer中释放动态库资源:<br>procedure TForm1.DLLFormCloseMsg(var Message: TMessage);<br>begin<br>&nbsp; Timer1.Enabled := True;<br>end;<br><br>procedure TForm1.Timer1Timer(Sender: TObject);<br>begin<br>&nbsp; Timer1.Enabled := False;<br>&nbsp; FreeLibrary(hDll);<br>end;
 
to qsoft.51.net:<br>你用PostMessage发送消息就可以,没有必要使用时间控件,因为用PostMessage发送的消息只有等到你的FormDestroy事件执行完成后才会处理消息的,这样你就可以在消息处理函数中释放DLL了
 
请qiyanhai告诉我详细写法好吗?
 
请qiyanhai给出详细的示列程序,谢谢!
 
消息不能相应
 
多人接受答案了。
 
后退
顶部