首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >继承接口和IUnknown、IDispatch方法定义

继承接口和IUnknown、IDispatch方法定义
EN

Stack Overflow用户
提问于 2012-05-26 14:46:10
回答 2查看 2.6K关注 0票数 0

我需要继承一个带有抽象方法的接口,在VB/c#中,我们只需覆盖接口中的方法,而不需要为IUnknown或IDispatch方法编写代码

但在c++中,在继承类中的接口并覆盖接口中的方法之后,当我尝试实例化派生类时,我得到了以下错误

代码语言:javascript
复制
error C2259: 'Imyinterface' : cannot instantiate abstract class
1>          due to following members:



'HRESULT IUnknown::QueryInterface(const IID &,void **)' : is abstract
'ULONG IUnknown::AddRef(void)' : is abstract
 'ULONG IUnknown::Release(void)' : is abstract 

所以我需要覆盖/定义IUnknown和IDispatch方法,例如addref、Release、QueryInterface、invoke、gettypeinfo

由于它们看起来是标准函数,我可以从哪里获得它们的代码/定义e.g.ATL或或任何类型库?或任何可以获得上述方法的代码/示例的参考资料

EN

回答 2

Stack Overflow用户

发布于 2012-05-26 15:22:14

QueryInterface:如果可以到达由传入的GUID标识的接口,则在void **参数中放置指向该接口的指针;否则将void **设置为NULL。返回相应的HRESULT

AddRef:增加接口的引用计数。

Release:减少接口的引用计数。

我建议在深入研究这一点之前,先阅读一本关于COM的好书。Inside Com (Microsoft Programming Series) by Dale Rogerson的二手拷贝很便宜。它确实有一些例子。阅读亚马逊上的评论,看看你是否想买这本书。

票数 0
EN

Stack Overflow用户

发布于 2012-05-26 14:50:37

您需要覆盖这些方法,并提供它们的定义(在派生类中),以及在基类中声明为纯虚拟的所有函数。

除非您这样做,否则您的派生类也会充当抽象类,并且不能创建它的任何对象。

对于第二个问题,对于那些方法的标准实现应该做什么,我没有任何真正好的想法。

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

https://stackoverflow.com/questions/10764223

复制
相关文章

相似问题

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