2015-09-11 63 views
0

是否有可能为使用ATL的类的QueryInterface提供实现?使用ATL覆盖QueryInterface

BEGIN_COM_MAP(CConcrete) // Defines _InternalQueryInterface 
    COM_INTERFACE_ENTRY(IInterface) 
END_COM_MAP() // Defines QueryInterface as a pure virtual function which 
       // is overridden in CComObject<CConcrete> 

我重写了嘲讽的目的,允许用户模拟QueryInterface失败。如果未明确配置,我希望保留默认的ATL QueryInterface功能。

调用堆栈看起来是这样的:

CComObjectRootBase::InternalQueryInterface 
CConcrete::_InternalQueryInterface // BEGIN_COM_MAP 
CComObject<CConcrete>::QueryInterface // Override of QI from END_COM_MAP 
+0

您可以使用['COM_INTERFACE_ENTRY_NOINTERFACE'](https://msdn.microsoft.com/en-us/library/a6ba4c4b.aspx)模拟丢失的接口,您当然可以用其他方式覆盖它。使用这个记录的宏可能是最简单的。 –

回答

0

我最终什么事做的是创造的BEGIN_COM_MAP的新版本不包括_InternalQueryInterface的实现。然后我把我的模拟代码放在那里,然后转发非模拟的电话给InternalQueryInterface