gpt4 book ai didi

delphi - 如何从 TClass 创建的对象中获取接口(interface)?

转载 作者:行者123 更新时间:2023-12-03 14:59:53 25 4
gpt4 key购买 nike

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

(我已经放弃了将此函数添加到通用锚定表单的想法,因为我不想添加一个对我的大多数表单都无用的函数。)

所以...我考虑使用接口(interface)。

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’”错误。有没有办法使用接口(interface)来实现我的目标,或者尝试其他方法会更好?

最佳答案

使用Supports检查接口(interface)是否实现的函数。

示例:

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

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

您需要为您的接口(interface)声明 GUID。否则 Supports 将不起作用。所以接口(interface)声明应该是这样的:

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

关于delphi - 如何从 TClass 创建的对象中获取接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39041385/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com