delphi - 查询未知接口(interface)类型

标签 delphi generics delphi-2010

在此代码中:

TTest<IntfT: IInterface> = class
protected
  fObj : TInterfacedObject;
public
  function  GetVal: IntfT;
end;

如果我希望 GetVal 函数将 fObj 作为 IntfT 返回,我该如何实现它?

我已经尝试过:

result := fObj as IntfT;

fObj.QueryInterface(IntfT,result);

result := fObj as IInterface;

但似乎没有任何效果。这看起来是一件很简单的事情,我一直在想我一定错过了一些东西。

有什么想法吗?

编辑

目前对我来说最有前途的是 QueryInterface。目前,编译器提示 IntfT 不是 GUID,我的印象是,如果我有适当的 GUID,一切都会很高兴。有人知道在这种情况下可以从接口(interface)类型获取 IID 的方法吗?

最佳答案

result := fObj as IntfT; 应该可以工作,但显然编译器不太理解接口(interface)作为泛型。您应该在 QC 中报告此情况。

fObj.QueryInterface(IntfT,result); 不起作用,因为 QueryInterface 是 TInterfacedObject 的 protected 成员。另外,QueryInterface 通过调用 GetInterface 来工作,它会查找 GUID,而 GUID 和泛型不能很好地混合。

result := fObj as IInterface; 确实适合我编译。您遇到什么问题了吗?

关于delphi - 查询未知接口(interface)类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1724133/

相关文章:

delphi - Indy 10 TCP Client Server - 测试开放通信 channel

delphi - FastReport导致Delphi崩溃

delphi - 如何在半透明窗口上显示不透明文本?

java - 如何绑定(bind)子类的类类型

delphi - 如何仅支持 TLS 1.x(在我的网络服务中)?

java - 实现抽象泛型方法

Delphi 模拟向导

delphi - Delphi 2010是否将菜单锁定在顶部?

Delphi 应用程序.HintColor

typescript - 如何将身份函数严格键入为特定变换?