使用ATL覆盖QueryInterface

时间:2015-09-11 14:04:27

标签: c++ atl

是否可以使用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

1 个答案:

答案 0 :(得分:0)

我最终做的是创建BEGIN_COM_MAP的新版本,但不包含_InternalQueryInterface的实现。然后我将我的模拟代码放在那里,并将非模拟调用转发给InternalQueryInterface