2015-09-11 125 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