我需要继承一个带有抽象方法的接口,在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
由于它们看起来是标准函数,我可以从哪里获得它们的代码/定义e.g.ATL或或任何类型库?或任何可以获得上述方法的代码/示例的参考资料
发布于 2012-05-26 15:22:14
QueryInterface:如果可以到达由传入的GUID标识的接口,则在void **参数中放置指向该接口的指针;否则将void **设置为NULL。返回相应的HRESULT。
AddRef:增加接口的引用计数。
Release:减少接口的引用计数。
我建议在深入研究这一点之前,先阅读一本关于COM的好书。Inside Com (Microsoft Programming Series) by Dale Rogerson的二手拷贝很便宜。它确实有一些例子。阅读亚马逊上的评论,看看你是否想买这本书。
发布于 2012-05-26 14:50:37
您需要覆盖这些方法,并提供它们的定义(在派生类中),以及在基类中声明为纯虚拟的所有函数。
除非您这样做,否则您的派生类也会充当抽象类,并且不能创建它的任何对象。
对于第二个问题,对于那些方法的标准实现应该做什么,我没有任何真正好的想法。
https://stackoverflow.com/questions/10764223
复制相似问题