如何安全且完整地释放Dll
主程序动态地Load几个我自己写的Dll,
并实例化当中一个继承自 TPage 的类,比如 TMyPage = class(TPage),
其中 TMyPage 又 Create N 个对象。
最后Free TMyPage 的实例。
但TMyPage下的N个对象我没把握一定会全释放(有时会忘记,你知道的)
那,我要如何安全又完整地释放上述动态Load的DLL呢?
我看到VB下有提供了一个类似SafeXXXX的方法可以安全(即不出错)释放DLL,
我们Delphi下有什么技巧可以既安全
又完整地(即任何跟随TMyPage建立的对象都Free掉)释放Dll呢?
我设计的框架会很频繁地(几分钟到几十分钟一次吧)Load和释放Dll,
有什么相关的技巧是我要知道并注意的呢? DLL
[解决办法]
obj:=tboject.create(owner);
obj创建后,它的释放由owner负责,你无需关系obj什么时候释放,因为owner释放时就会负责它obj释放
再个例子,
var
form2:tform;
page1:tmypage;
begin
form2:=tform.create(form1{self}); // form2对象的释放交由form1自动完成,假设form1是主窗体,那它即self
page1:=tmypage(form2);// page1对象的释放就由form2负责,不是窗体也可以
// 只要它是个TComponet类或其后代类,实际上所有从TPersistent继承的对象
// 都由vcl内存实现了该功能,你只要确保最顶端的owner(属主,最外层容器)
// 释放了,那么所有属于它的对象都能自动释放
.......
// 最后form1销毁时,就会销毁form2,form2销毁时就销毁page1
// 你只要明确顶层的owner(这里是form1)销毁就行了
form1.free;
end;
另外dll如果频繁使用,静态调用就得了
[解决办法]
通常的跟ui相关的都不提倡放dll中,dll中应该只封装业务逻辑,你在设计处就应该考虑到。
那些你说的无法把握的对象的free又是咋回事,如果曾经出现过这种情况,应该打破砂锅弄清楚原因
另个你load\free几分钟到几十分钟一次也不算频繁吧,反而应该说是很少才对。。。
[解决办法]
和界面相关的建议放入BPL,不然内存操作蛋疼的很