继承界面& IUnknown,IDispatch方法定义

时间:2012-05-26 06:46:10

标签: c++ inheritance com interface idispatch

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

但是在c ++中, 在继承类&中的接口之后在界面中覆盖方法, 当我试图实例化派生类 我收到了以下错误

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,释放,的QueryInterface,调用GetTypeInfo的

因为它们似乎是标准函数,我在哪里可以得到它们的代码/定义,例如ATL或任何类型库? 或任何我可以获得上述方法的代码/示例的参考文献

2 个答案:

答案 0 :(得分:0)

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

AddRef:增加界面的引用次数。

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

我建议在深入研究之前获得一本关于COM的好书。使用的Inside Com (Microsoft Programming Series) by Dale Rogerson副本很便宜。它确实有例子。阅读亚马逊上的评论,了解您是否愿意购买此书。

答案 1 :(得分:-1)

您需要覆盖这些方法并提供它们的定义(在派生类中)以及在基类中声明为pure virtual的所有函数。
除非您这样做,否则您的派生类也充当抽象类,您无法创建它的任何对象。

对于第二个Q,我不知道这些方法的标准实现应该做什么。