检查两个接口类型是否兼容

last_wolf1860 2011-04-28 12:35:44
以下例子中 m_Feedback是一个实例化的接口,INewPolygonFeedback是一个接口类型
在C#中, if (m_Feedback is INewPolygonFeedback) {},很Easy检测出两个接口是否兼容
在Delphi中,则编译不过去,似乎D的is只支持类的检测,报"Operator not applicable the operand type",请高人解惑:)
...全文
122 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
last_wolf1860 2012-02-27
  • 打赏
  • 举报
回复
最恰当的做法是if support,博客园一个哥们儿给的思路,同志们试试
last_wolf1860 2011-05-06
  • 打赏
  • 举报
回复
queryInterface正解 = 0 即可进行判断:)感谢各位提供思路
金卯刀 2011-04-29
  • 打赏
  • 举报
回复
if (m_Feedback is INewPolygonFeedback) {}中m_Feedback是一个接口,INewPolygonFeedback也是一个接口
-----
依据所举例子的进行类比。m_Feedback应该是一个“接口对象”。就我所理解的,“接口”是一个类型,实现它的,称做“接口对象”,这样表达上面不会混乱。

如果判断某某“接口对象”是否实现某接口,可以这样:
I_Instance.QueryInterface(接口ID, IObj)
具体用法,参考帮助
last_wolf1860 2011-04-28
  • 打赏
  • 举报
回复
感谢三楼回答。这个问题用兼容来讲是有些问题,我是套用了有关C#对is用法的解释,不好意思。
其实问的就是类似于(btn1 is TButton)的东西,btn1是一个类实例,TButton是一个类。
现在把两者都换成了接口,if (m_Feedback is INewPolygonFeedback) {}中m_Feedback是一个接口,INewPolygonFeedback也是一个接口,其中实现m_Feedback的类是实现INewPolygonFeedback的类的父类,这种问题应该在COM编程中经常遇到的,象上例 就是使用arcEngine写一个小程序时的问题,虽然绕了点弯也解决掉了,但心里始终有些别扭。还望各位先生达人不吝解惑。
金卯刀 2011-04-28
  • 打赏
  • 举报
回复
你的问法,看起来很奇怪。特别是“在C#中, if (m_Feedback is INewPolygonFeedback) {},很Easy检测出两个接口是否兼容”
猜测:你只是想知道某个对象是否实现了INewPolygonFeedback而已。不是所谓的“两个接口是否兼容”。

如果是这样,直接调用GetInterface(接口ID, IObj)返回是否成功即可。
last_wolf1860 2011-04-28
  • 打赏
  • 举报
回复
谢谢一楼回答:)
as是接口之间的强制转换,根据异常来判断类型?不到万不得已不想用这种方式:)
浩南_哥 2011-04-28
  • 打赏
  • 举报
回复
用 “as” 试试

1,184

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧