在此代码中:
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/