c++ - 使用 ATL 覆盖 QueryInterface

标签 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

最佳答案

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

关于c++ - 使用 ATL 覆盖 QueryInterface,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32525395/

相关文章:

c++ - 是否可以检测 lambda 在捕获组中是否具有 “this”?

c++ - 是否可以防止 unordered_map::insert 抛出异常?

c++ - COM 事件处理的最快方式(在性能方面)

c++ - 在 CAxDialogImpl 中使用 ATL CEdit 将编辑框添加到 ATL 对话框

c++ - 如何删除 ATL COM C++ 中的方法

c++ - opencv的回调——详情引用

c++ - opencv:如何将 float 组保存为图像

C++ 派生类型必须定义静态 constexpr

c++ - 无法将参数 1 从 'ATL::CStringT<wchar_t,ATL::StrTraitATL<wchar_t,ATL::ChTraitsCRT<wchar_t>>>' 转换为 'const char *'

c++ - 如何扩展 CAxHostWindow?