COM_INTERFACE_ENTRY макросы

Эти макросы введите интерфейсы объектов в свою карту COM, таким образом, чтобы они могут быть доступны QueryInterface. Порядок записи в схеме COM-интерфейсы порядок будет проверяться на соответствующий идентификатор IID во время QueryInterface.

Каждый объект, который хочет подвергают свои интерфейсы через QueryInterface должна иметь свою собственную схему COM. COM карты начинается с макрос BEGIN_COM_MAP. Интерфейс записи добавляются с одним или несколькими из макросов, COM_INTERFACE_ENTRY , и карта будет завершена с макросом END_COM_MAP . Например:

BEGI&N_COM_MAP(CMyObject)
 nbsp;  COM_INTERFACE_ENTRY(IDispatch)
    COM_INTERFACE_ENTRY(IMyObject)
END_COM_MAP)

Посмотреть ATL COMMAP образец для примеров с использованием различных типов COM сопоставить записи макросов.

Обратите внимание, что первый элемент в схеме COM должен быть интерфейсом на объект, содержащий карту COM. Таким образом, ваши записи сопоставления COM не может начинаться с COM_INTERFACE_ENTRY_CHAIN, что приводит COM карту другой объект для поиска в точке где COM_INTERFACE_ENTRY_CHAIN (COtherObject) появляется в вашем объекта COM карте. Если вы хотите искать COM карта другого объекта во-первых, добавить элемент интерфейса IUnknown для сопоставления COM, затем цепи другого объекта COM карты. Например:

BEGI&N_COM_MAP(CThisObject)
 nbsp; COM_INTERFACE_ENTRY(IUnknown)
   COM_INTERFACE_ENTRY_CHAIN(COtherObject)
END_COM_MAP)

Осторожно nbsp; Состоянию на версии 3.0, ATL используется ключевое слово компилятора __uuidof ( класса ) для получения соответствующего IID для данного класса. Из-за изменений в COM_I&NTERFACE_ENTRY макросы в версии 3.0 теперь вы просто включать заголовок для интерфейса для использования, вместо того, чтобы также ссылки на библиотеки, которая определяет соответствующие идентификаторы IID для данного интерфейса. Это изменение может вызвать проблемы, если заголовок был созданного с более старой версией MIDL, или если он был стороны кодом и не помечены соответствующим образом. Если объявление для интерфейса в заголовке не были помечены в связанные __declspec ( uuid ), то любая попытка использовать __uuidof ключевое слово для этого интерфейса не удастся. Вы можете вернуться к старых макросов COM_INTERFACE_ENTRY (ATL 2.x) путем определения _ATL_NO_UUIDOF в настройках вашей сборки для решения любых проблем с такое новое поведение.

Ниже перечислены доступные записи макросов:

Карта COM записи макросов

COM_INTERFACE_ENTRY
COM_INTERFACE_ENTRY_IID
COM_INTERFACE_ENTRY2
COM_INTERFACE_ENTRY2_IID
COM_INTERFACE_ENTRY_FUNC
COM_INTERFACE_ENTRY_FUNC_BLIND
COM_INTERFACE_ENTRY_TEAR_OFF
COM_INTERFACE_ENTRY_CACHED_TEAR_OFF
COM_INTERFACE_ENTRY_AGGREGATE
COM_INTERFACE_ENTRY_AGGREGATE_BLIND
COM_INTERFACE_ENTRY_AUTOAGGREGATE
COM_INTERFACE_ENTRY_AUTOAGGREGATE_BLIND
COM_INTERFACE_ENTRY_CHAIN
COM_INTERFACE_ENTRY_BREAK
COM_INTERFACE_ENTRY_NOINTERFACE

Глобальные функции и макросы ATL

Index