Архитектура Подключение доступных объектов
Соединительный объект — это только одна часть общей архитектуры соединительных объектов. Эта технология включает следующие элементы:
- Подключение доступный объект. Реализует интерфейс I Подключение ionPointContainer; создает по крайней мере один объект точки подключения; определяет исходящий интерфейс для клиента.
- Клиент. Запрашивает объект для I Подключение ionPointContainer, чтобы определить, можно ли подключить объект-приемник; создает объект приемника для реализации исходящего интерфейса, определенного соединительным объектом.
- Объект приемника. Реализует исходящий интерфейс; используется для установления подключения к подключаемому объекту.
- объект точки Подключение ion. Реализует интерфейс I Подключение ionPoint и управляет подключением к приемнику клиента.
Связи между клиентом, подключаемым объектом, точкой подключения и приемником показаны на следующей схеме:
Прежде чем объект точки подключения вызывает методы в интерфейсе приемника на шаге 3 на предыдущей схеме, он должен запрашиватьInterface для определенного интерфейса, даже если указатель уже передан в шаге 2 вызова метода Совет.
Два объекта перечислителя также участвуют в этой архитектуре, хотя и не показаны на рисунке. Один создается методом в I Подключение ionPointContainer для перечисления точек подключения в подключаемом объекте. Другой создается методом в I Подключение ionPoint для перечисления подключений, установленных в данный момент к этой точке подключения. Одна точка подключения может поддерживать несколько интерфейсов подключенного приемника, и она должна выполнять итерацию по списку подключений при каждом вызове метода в этом интерфейсе. Этот процесс называется многоадресной рассылкой.
При работе с подключенными объектами важно понимать, что соединительный объект, каждая точка подключения, каждый приемник и все перечислители являются отдельными объектами с отдельными реализациями IUnknown , отдельными счетчиками ссылок и отдельными временем существования. Клиент, использующий эти объекты, всегда отвечает за освобождение всех ссылок, принадлежащих ему.
Примечание.
Подключенный объект может поддерживать несколько клиентов и может поддерживать несколько приемников в клиенте. Аналогичным образом приемник может быть подключен к нескольким соединительным объектам.
Ниже приведены шаги по установлению соединения между клиентом и подключенным объектом:
- Клиентские запросы для I Подключение ionPointContainer объекта, чтобы определить, можно ли подключить объект. Если этот вызов выполнен успешно, клиент содержит указатель на интерфейс I Подключение ionPointContainer в подключаемом объекте, а счетчик ссылок на подключенный объект был добавлен. В противном случае объект недоступен для подключения и не поддерживает исходящие интерфейсы.
- Если объект доступен для подключения, клиент затем пытается получить указатель на интерфейс I Подключение ionPoint в точке подключения в подключаемом объекте. Существует два метода получения этого указателя как в I Подключение ionPointContainer::Find Подключение ionPoint, так и в I Подключение ionPointContainer::Enum Подключение ionPoints. Если используется Enum Подключение ionPoints, необходимо выполнить несколько дополнительных действий. (См. раздел Дополнительные сведения об использовании I Подключение ionPointContainer.) В случае успешного выполнения соединительный объект и клиент поддерживают один и тот же исходящий интерфейс. Подключенный объект определяет его и вызывает его, и клиент реализует его. Затем клиент может взаимодействовать через точку подключения в подключаемом объекте.
- Затем клиент вызывает совет по точке подключения, чтобы установить соединение между интерфейсом приемника и точкой подключения объекта. После этого вызова точка подключения объекта содержит указатель на исходящий интерфейс в приемнике.
- Код внутри Advise вызывает QueryInterface на указателе интерфейса, который передается, запрашивая конкретный идентификатор интерфейса, к которому он подключается.
- Объект вызывает методы в интерфейсе приемника по мере необходимости, используя указатель, удерживаемый точкой подключения.
- Клиент вызывает Unadvise , чтобы завершить подключение. Затем клиент вызывает I Подключение ionPoint::Release, чтобы освободить его удержание в точке подключения и, следовательно, основной объект, доступный для подключения. Клиент также должен вызвать I Подключение ionPointContainer::Release, чтобы освободить его удержание в основном подключаемом объекте.
См. также