Поделиться через


Архитектура Подключение доступных объектов

Соединительный объект — это только одна часть общей архитектуры соединительных объектов. Эта технология включает следующие элементы:

  • Подключение доступный объект. Реализует интерфейс I Подключение ionPointContainer; создает по крайней мере один объект точки подключения; определяет исходящий интерфейс для клиента.
  • Клиент. Запрашивает объект для I Подключение ionPointContainer, чтобы определить, можно ли подключить объект-приемник; создает объект приемника для реализации исходящего интерфейса, определенного соединительным объектом.
  • Объект приемника. Реализует исходящий интерфейс; используется для установления подключения к подключаемому объекту.
  • объект точки Подключение ion. Реализует интерфейс I Подключение ionPoint и управляет подключением к приемнику клиента.

Связи между клиентом, подключаемым объектом, точкой подключения и приемником показаны на следующей схеме:

Diagram that shows the connection points between the Client and Connectable Object.

Прежде чем объект точки подключения вызывает методы в интерфейсе приемника на шаге 3 на предыдущей схеме, он должен запрашиватьInterface для определенного интерфейса, даже если указатель уже передан в шаге 2 вызова метода Совет.

Два объекта перечислителя также участвуют в этой архитектуре, хотя и не показаны на рисунке. Один создается методом в I Подключение ionPointContainer для перечисления точек подключения в подключаемом объекте. Другой создается методом в I Подключение ionPoint для перечисления подключений, установленных в данный момент к этой точке подключения. Одна точка подключения может поддерживать несколько интерфейсов подключенного приемника, и она должна выполнять итерацию по списку подключений при каждом вызове метода в этом интерфейсе. Этот процесс называется многоадресной рассылкой.

При работе с подключенными объектами важно понимать, что соединительный объект, каждая точка подключения, каждый приемник и все перечислители являются отдельными объектами с отдельными реализациями IUnknown , отдельными счетчиками ссылок и отдельными временем существования. Клиент, использующий эти объекты, всегда отвечает за освобождение всех ссылок, принадлежащих ему.

Примечание.

Подключенный объект может поддерживать несколько клиентов и может поддерживать несколько приемников в клиенте. Аналогичным образом приемник может быть подключен к нескольким соединительным объектам.

 

Ниже приведены шаги по установлению соединения между клиентом и подключенным объектом:

  1. Клиентские запросы для I Подключение ionPointContainer объекта, чтобы определить, можно ли подключить объект. Если этот вызов выполнен успешно, клиент содержит указатель на интерфейс I Подключение ionPointContainer в подключаемом объекте, а счетчик ссылок на подключенный объект был добавлен. В противном случае объект недоступен для подключения и не поддерживает исходящие интерфейсы.
  2. Если объект доступен для подключения, клиент затем пытается получить указатель на интерфейс I Подключение ionPoint в точке подключения в подключаемом объекте. Существует два метода получения этого указателя как в I Подключение ionPointContainer::Find Подключение ionPoint, так и в I Подключение ionPointContainer::Enum Подключение ionPoints. Если используется Enum Подключение ionPoints, необходимо выполнить несколько дополнительных действий. (См. раздел Дополнительные сведения об использовании I Подключение ionPointContainer.) В случае успешного выполнения соединительный объект и клиент поддерживают один и тот же исходящий интерфейс. Подключенный объект определяет его и вызывает его, и клиент реализует его. Затем клиент может взаимодействовать через точку подключения в подключаемом объекте.
  3. Затем клиент вызывает совет по точке подключения, чтобы установить соединение между интерфейсом приемника и точкой подключения объекта. После этого вызова точка подключения объекта содержит указатель на исходящий интерфейс в приемнике.
  4. Код внутри Advise вызывает QueryInterface на указателе интерфейса, который передается, запрашивая конкретный идентификатор интерфейса, к которому он подключается.
  5. Объект вызывает методы в интерфейсе приемника по мере необходимости, используя указатель, удерживаемый точкой подключения.
  6. Клиент вызывает Unadvise , чтобы завершить подключение. Затем клиент вызывает I Подключение ionPoint::Release, чтобы освободить его удержание в точке подключения и, следовательно, основной объект, доступный для подключения. Клиент также должен вызвать I Подключение ionPointContainer::Release, чтобы освободить его удержание в основном подключаемом объекте.

Подключение доступные интерфейсы объектов