使用ATL覆盖QueryInterface

Override QueryInterface using ATL

本文关键字:QueryInterface 覆盖 ATL 使用      更新时间:2023-10-16

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

我最终做的是创建一个不包括_InternalQueryInterface实现的BEGIN_COM_MAP的新版本。然后我把我的模拟代码在那里,并转发非模拟调用InternalQueryInterface