实现 CComObjectRootEx
CComObjectRootEx 非常重要;所有 ATL 对象必须在其继承中有一个 CComObjectRootEx
或 CComObjectRoot 的实例。 CComObjectRootEx
提供基于 COM 映射项的默认 QueryInterface
机制。
通过其 COM 映射,对象的接口将在客户端查询接口时向该客户端公开。 该查询通过 CComObjectRootEx::InternalQueryInterface
执行。 InternalQueryInterface
仅处理 COM 映射表中的接口。
你可以使用 COM_INTERFACE_ENTRY 宏或它的一个变体将接口输入到 COM 映射表。 例如,以下代码输入可将接口 IDispatch
、IBeeper
和 ISupportErrorInfo
输入到 COM 映射表:
BEGIN_COM_MAP(CBeeper)
COM_INTERFACE_ENTRY(IBeeper)
COM_INTERFACE_ENTRY(IDispatch)
COM_INTERFACE_ENTRY_TEAR_OFF(IID_ISupportErrorInfo, CBeeper2)
END_COM_MAP()