Rob*_*ler 7 delphi interface object-lifetime access-violation
我有一个Delphi表单,它提供了一个接口对象背后的功能,代码的其他部分也通过属于Form的属性获得引用.我无法将接口功能委托给子对象,因为窗体上的控件/组件提供了太多的功能.我不能使用TAggregatedObject或TContainedObject来链接传递给接口的对象的生命周期,因为TForm类不继承TinterfacedObject而Delphi不支持多重继承,所以我不能将TInterfacedObject混合到继承链中.如果表单被销毁而某些其他代码包含表单传递的一个接口引用,则这种情况可能导致访问冲突.谁能想到这个问题的好方法呢?
您可以将接口委托给子对象,只需让该对象包含一个指向Form的内部指针,这样它就可以在需要时访问Form的控件,与您现在已经在做的没有什么不同.
您可以使用TAggregateObject
或TContainedObject
满足您的需求.他们不要求表格来源TInterfacedObject
.它们所需要的只是一个IInterface
接口指针,并TComponent
从IInterface
(并覆盖_AddRef()
和_Release()
禁用引用计数)派生,因此您可以将Form本身(作为TComponent
后代)作为所需IInterface
指针传递.
这留下了唯一的问题 - 当活动接口引用被其他代码保存时,表单关闭.最简单的解决方案是:1)重写该代码,以便在Form关闭时不保留这些引用,或2)不允许Form关闭,直到这些引用被释放.
归档时间: |
|
查看次数: |
1171 次 |
最近记录: |