Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Примечание.
Библиотека активных шаблонов (ATL) продолжает поддерживаться. Однако мы больше не добавляем функции или обновляем документацию.
На следующем рисунке показана связь между классами и интерфейсами, которые используются для определения com-объекта ATL.
Примечание.
Эта диаграмма показывает, что CComObject производится от CYourClass, а CComAggObject и CComPolyObject включают CYourClass в качестве переменной-члена.
Существует три способа определения COM-объекта ATL. Стандартный вариант — использовать класс, производный CComObject от CYourClass. Второй вариант — создать агрегированный объект с помощью CComAggObject класса. Третий вариант — использовать CComPolyObject класс.
CComPolyObject является гибридом: он может функционировать как класс CComObject или класс CComAggObject, в зависимости от способа его создания. Дополнительные сведения об использовании CComPolyObject класса см. в разделе CComPolyObject Class.
При использовании стандартного COM ATL используются два объекта: внешний объект и внутренний объект. Внешние клиенты получают доступ к функциям внутреннего объекта через функции-оболочки, определенные во внешнем объекте. Внешний объект имеет тип CComObject.
При использовании агрегированного объекта внешний объект не предоставляет оболочки для функциональных возможностей внутреннего объекта. Вместо этого внешний объект предоставляет указатель, к которому внешний клиент может обращаться напрямую. В этом сценарии внешний объект имеет тип CComAggObject. Внутренний объект представляет собой переменную-член внешнего объекта, и он имеет тип CYourClass.
Так как клиенту не нужно проходить через внешний объект для взаимодействия с внутренним объектом, агрегированные объекты обычно более эффективны. Кроме того, внешний объект не должен знать функциональные возможности агрегированного объекта, учитывая, что интерфейс агрегированного объекта напрямую доступен клиенту. Однако не все объекты можно агрегировать. Чтобы объект был агрегирован, он должен быть разработан с учетом агрегирования.
ATL реализует IUnknown на двух этапах:
CComObject, CComAggObject или CComPolyObject реализует
IUnknownметоды.CComObjectRoot или CComObjectRootEx управляет счетчиком ссылок и внешними указателями
IUnknown.
Другие аспекты com-объекта ATL обрабатываются другими классами:
CComCoClass определяет фабрику классов по умолчанию объекта и модель агрегирования.
IDispatchImpl предоставляет реализацию по умолчанию части любого двойного интерфейса на объекте.
ISupportErrorInfoImpl реализует
ISupportErrorInfoинтерфейс, обеспечивающий правильное распространение сведений об ошибках в цепочке вызовов.
В этом разделе
Реализация CComObjectRootEx
Показать примеры записей карты COM для реализации CComObjectRootEx.
Реализация CComObject, CComAggObject и CComPolyObject
Описывает, как макросы DECLARE_*_AGGREGATABLE влияют на использование CComObject, CComAggObjectи CComPolyObject.
Поддержка IDispatch и IErrorInfo
Выводит список классов реализации ATL, используемых для поддержки IDispatch интерфейсов и IErrorInfo интерфейсов.
Поддержка IDispEventImpl
Описывает шаги по реализации точки подключения для класса.
Изменение фабрики классов по умолчанию и модели агрегации
Отображение макросов, используемых для изменения фабрики классов по умолчанию и модели агрегирования.
Создание объединенного объекта
Перечисляет шаги по созданию агрегированного объекта.
Связанные разделы
Создание проекта ATL
Предоставляет сведения о создании COM-объекта ATL.
ATL
Предоставляет ссылки на концептуальные темы о программировании с использованием библиотеки Active Template Library (ATL).