Реализация CComObjectRootEx
CComObjectRootEx имеет важное значение. Все объекты ATL должны иметь один экземпляр CComObjectRootEx
или CComObjectRoot в их наследовании. CComObjectRootEx
предоставляет механизм по умолчанию QueryInterface
, основанный на записях сопоставления COM.
Посредством его сопоставления COM интерфейсы объекта предоставляются клиенту, когда он запрашивает интерфейс. Запрос выполняется с помощью CComObjectRootEx::InternalQueryInterface
. InternalQueryInterface
обрабатывает интерфейсы только в таблице сопоставлений COM.
Интерфейсы можно ввести в таблицу карты COM с помощью макроса COM_INTERFACE_ENTRY или одного из его вариантов. Например, следующий код вводит интерфейсы 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()