正如4.4.3中的代码说明的那样,DLL窗口的打开和关闭只是在表象层,关闭窗口并没有真正释放DLL窗口,只是调用API函数FindWindow根据窗口标识(就是Form.name)获得窗体句柄,用SHOWWINDOW函数的nCmdShow参数控制窗口显示/隐藏。
其实这是我这个程序实现的不好的一个地方,如果在DLL窗口中使用Self.close方法会引起内存错误,实在能力有限没有办法解决,因此出此下策。所以每个DLL程序主窗口的关闭按钮都必须隐藏掉。 :-P
4.4.5 DLL库的释放
在程序退出时,必须根据插件信息实例逐一释放DLL库。释放DLL库的函数如下:
procedure TFormHall.ClosePlugin(aPLG:TMyPlugins);
var
FreeDLLForm:TFreeDLLForm;
begin
if aPLG.ProcAddr = 0 then exit;
if aPLG.FuncFreeAddr = nil then exit;
@FreeDLLForm:=aPLG.FuncFreeAddr;
if not FreeDLLForm(Application.Handle,'''''''','''''''') then
showMessage(''''err'''');
end;
5 小结
本实例程序运行效果如下:
我以上的方法中,因为有不少能力有限没有解决的问题,所以采用了一些看起来不太合理的掩饰方法,希望大家能在做了一点尝试后设计出更好的解决方法,我也希望能学到更多的好方法。
本文只给出了部分代码,如果您需要完整的代码可以写邮件给我。我也很欢迎各位能对我的方法提出建议和意见,这是我第一次尝试DLL编程的一点感受,希望能给同样也有兴趣的朋友一点线索。
上一页 [1] [2] [3] [4] [5] [6] [7]
Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved. 闵涛 E_mail:admin@mintao.net(欢迎提供学习资源)
鄂公网安备 42011102001154号
站长:MinTao ICP备案号:鄂ICP备11006601号-18