procedure TInterfacedObject.BeforeDestruction;
begin
end;
然后我们DLL中所有的类只用从TourInterfacedObject继承就可以了。
※改进和手工管理
这次我们再进行测试时就没有任何的问题了吗?如果只是上面的代码的确没有问题了,但问题是我们可能需要在任何地方使用接口操作我们所管理的对象,而delphi编译器会在接口变量离开作用域或者被手工设置为nil时自动调用_IntfClear以决定是否释放实现接口的对象,如果在这之前我们已经调用诸如DelAFoo这样的方法手工释放了我们的对象,那么在调用_IntfClear时,一个访问异常出现了,因为这时对象已经根本不存在了!!现在是应该彻底把对象生命周期交给我们管理而不是交给接口管理的时候了(上面的做法是片面的,因为事实上对象内部仍然存在着一个引用计数值,我们只是用了一点技巧混淆了它对对象生命周期的管理),看来我们又要回到最开始了,我们不得不考虑不要TinterfacedObject而是自己写一个实现Iinterface的类,彻底的抛弃引用计数,并省略到诸如BeforeDestruction之类的不必要的方法:
TMyInterfacedObject = class(TObject, IInterface)
protected
function QueryInterface(const IID: TGUID; out Obj): HResult; stdcall;
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!




