delphi – 如何从TClass创建的对象获取接口?

我需要一些表单类实现相同的功能.

(我已经放弃了将这个函数添加一个共同的anchestor表单的想法,因为我不想添加一个在我的大多数表单上都没用的函数.)

所以……我想过使用接口.

IMyInterface = interface
  procedure ShowHello();
end;

var  
  MyForm : TMyForm;
  MyInterface : IMyInterface;
begin
  MyForm := TMyForm.Create(Self);
  MyInterface := MyForm;
  //...
end;

在这种简单的情况下,它可以正常工作,但我的应用程序使用动态包,我使用“GetClass”函数获取表单类.
我尝试如下:

var
  MyForm : TForm;
  MyInterface : IMyInterface;
begin
  MyForm := TForm(GetClass('TMyForm').Create());
  MyInterface := MyForm;
end;

它导致“不兼容的类型:’IMyInterface’和’TForm’”错误.
有没有办法使用接口实现我的目标,或者尝试其他方式会更好?

解决方法

使用 Supports功能检查接口是否已实现.

样品:

var
  MyForm : TForm;
  MyInterface : IMyInterface;
begin
  MyForm := TFormClass(GetClass('TMyForm')).Create(...);

  if Supports(MyForm,IMyInterface,MyInterface) then
  begin
    MyInterface.ShowHello;
  end;
end;

您需要为接口声明GUID.否则支持不起作用.所以接口声明应如下所示:

IMyInterface = interface
  ['{052E7D55-B633-4256-9084-37D797B01BB4}']
  procedure ShowHello();
end;

相关文章

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