0

我需要继承具有抽象方法的接口,在 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、Release、QueryInterface、invoke、gettypeinfo

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

4

2 回答 2

0

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

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

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

我建议在深入研究之前获得一本关于 COM 的好书。Dale Rogerson 的 Inside Com(微软编程系列)的二手副本很便宜。它确实有例子。阅读亚马逊上的评论,了解您是否愿意购买这本书。

于 2012-05-26T07:22:13.957 回答
-1

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

对于第二个 Q,不,我对这些方法的标准实现应该做什么没有任何真正的好主意。

于 2012-05-26T06:50:36.503 回答