使用 ATL 覆盖 QueryInterface
Override QueryInterface using 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
我最终做的是创建 BEGIN_COM_MAP
的新版本,其中不包含 _InternalQueryInterface
的实现。然后我将我的模拟代码放在那里,并将非模拟调用转发给 InternalQueryInterface
.
是否可以使用 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
我最终做的是创建 BEGIN_COM_MAP
的新版本,其中不包含 _InternalQueryInterface
的实现。然后我将我的模拟代码放在那里,并将非模拟调用转发给 InternalQueryInterface
.