我需要使用抽象方法继承接口, 在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或任何类型库? 或任何我可以获得上述方法的代码/示例的参考文献
答案 0 :(得分:0)
QueryInterface
:如果可以访问由传入的GUID标识的接口,则在void **
参数中添加指向该接口的指针;否则将void **
设置为NULL
。返回相应的HRESULT
。
AddRef
:增加界面的引用次数。
Release
:减少接口的引用计数。
我建议在深入研究之前获得一本关于COM的好书。使用的Inside Com (Microsoft Programming Series) by Dale Rogerson副本很便宜。它确实有例子。阅读亚马逊上的评论,了解您是否愿意购买此书。
答案 1 :(得分:-1)
您需要覆盖这些方法并提供它们的定义(在派生类中)以及在基类中声明为pure virtual的所有函数。
除非您这样做,否则您的派生类也充当抽象类,您无法创建它的任何对象。
对于第二个Q,我不知道这些方法的标准实现应该做什么。