在Delphi中安全地使用Form来分发与其生命周期相关的接口对象?

我有一个Delphi表单,它提供了一个接口对象背后的功能,代码的其他部分也通过属于Form的属性获得引用.我不能将接口功能委托给子对象,因为窗体上的控件/组件提供了太多的功能.我不能使用TAggregatedobject或TContainedobject来链接传递给接口的对象的生命周期,因为TForm类不继承Tinterfacedobject而Delphi不支持多重继承,所以我不能将TInterfacedobject混合到继承链中.如果表单被销毁而某些其他代码保存表单传递的一个接口引用,则此情况可能导致访问冲突.谁能想到这个问题的好方法呢?

解决方法

您可以将接口委托给子对象,只需让该对象包含一个指向Form的内部指针,这样它就可以在需要时访问Form的控件,这与您现在已经在做的没有什么不同.

您可以根据需要使用TAggregateObject或TContainedobject.它们不要求Form从TInterfacedobject派生.他们所需要的只是一个IInterface接口指针,TComponent来自IInterface(并覆盖_AddRef()和_Release()以禁用引用计数),因此您可以将Form本身(作为TComponent后代)作为所需的IInterface指针传递.

这留下了唯一的问题 – 当活动接口引用被其他代码保存时,表单关闭.最简单的解决方案是:1)在Form关闭时重写代码以不保留那些引用,或者2)在这些引用被释放之前不允许Form关闭.

相关文章

 从网上看到《Delphi API HOOK完全说明》这篇文章,基本上都...
  从网上看到《Delphi API HOOK完全说明》这篇文章,基本上...
ffmpeg 是一套强大的开源的多媒体库 一般都是用 c/c+&#x...
32位CPU所含有的寄存器有:4个数据寄存器(EAX、EBX、ECX和ED...
1 mov dst, src dst是目的操作数,src是源操作数,指令实现的...