首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查询未知接口类型

查询未知接口类型
EN

Stack Overflow用户
提问于 2009-11-12 17:53:25
回答 2查看 357关注 0票数 1

在此代码中:

代码语言:javascript
复制
TTest<IntfT: IInterface> = class
protected
  fObj : TInterfacedObject;
public
  function  GetVal: IntfT;
end;

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

我试过:

代码语言:javascript
复制
result := fObj as IntfT;

代码语言:javascript
复制
fObj.QueryInterface(IntfT,result);

代码语言:javascript
复制
result := fObj as IInterface;

但似乎什么都起不到作用。这似乎是一件很简单的事情,我一直在想,我一定是错过了什么。

有什么想法吗?

编辑

在我看来,现在最有希望的是QueryInterface。目前,编译器抱怨IntfT不是GUID,我的印象是,如果我有合适的GUID,一切都会很愉快。有人知道如何从在这种情况下工作的接口类型获取IID吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-11-13 05:08:25

以下是我想出的解决方案:

代码语言:javascript
复制
function TTest<IntfT>.GetVal: IntfT;
begin
  fObj.QueryInterface(GetTypeData(TypeInfo(T)).Guid,result);
end;

这似乎是可行的。(顺便说一句,这是因为fObj实际上不是一个TInterfacedObject,而是一个具有公共QueryInterface方法的不同接口实现类)。

票数 2
EN

Stack Overflow用户

发布于 2009-11-12 18:25:21

result := fObj as IntfT;应该可以工作,但显然编译器并不完全将接口理解为泛型。你应该向QC报告这件事。

fObj.QueryInterface(IntfT,result);无法工作,因为QueryInterface是TInterfacedObject的受保护的成员。另外,QueryInterface通过调用GetInterface来工作,GetInterface查找GUID,而GUID和泛型并不能很好地混合在一起。

result := fObj as IInterface;确实为我编译了。你有什么问题吗?

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1724133

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档