使用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
我最终做的是创建一个不包括_InternalQueryInterface
实现的BEGIN_COM_MAP
的新版本。然后我把我的模拟代码在那里,并转发非模拟调用InternalQueryInterface
。
相关文章:
- 为什么QueryInterface查看两个不同的com项目的同一代码行
- 在 QueryInterface() 实现中调用 AddRef() 的正确方法
- QueryInterface()成功时是否可以提供nullptr ?
- VB6组件上的QueryInterface只在调试器中返回E_NOINTERFACE
- 为什么QueryInterface()会失败,当接口确实在Windows中实现并具有内置编组器时
- 使用ATL覆盖QueryInterface
- 使用QueryInterface方法的目的是什么?(Direct3D)
- 不情愿地通过 RPC 调用 QueryInterface
- 对于进程间COM对象,不使用QueryInterface,将IDispatch*转换为IUnknown*是否安全?