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


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

Когда программа обнаруживает то, что произошло, она может уведомить своих клиентов. Например, если программа тикера акций обнаруживает изменение цены на акции, она может уведомить всех клиентов об изменении. Этот процесс уведомления называется запуском события.

С помощью COM объекты сервера могут использовать com-события для запуска событий без каких-либо сведений о том, какие объекты будут получать уведомления. Объекты также могут использовать подключенные объекты для хранения подробных сведений о клиентах, которые запрашивали уведомления.

Объекты, подключенные к COM, предоставляют исходящие интерфейсы своим клиентам в дополнение к входящим интерфейсам. В результате объекты и их клиенты могут участвовать в двунаправленном взаимодействии. Входящие интерфейсы реализуются в объекте и получают вызовы от внешних клиентов объекта, а исходящие интерфейсы реализуются на приемнике клиента и получают вызовы от объекта. Объект определяет интерфейс, который он хотел бы использовать, и клиент реализует его.

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

Исходящие интерфейсы также определяются объектом, но клиент предоставляет реализации исходящих интерфейсов в объекте приемника, который создает клиент. Затем объект вызывает методы исходящего интерфейса в объекте приемника, чтобы уведомить клиента об изменениях в объекте, активировать события в клиенте, запросить что-то от клиента или, на самом деле, для любой цели создатель объекта придумал.

Пример исходящего интерфейса — интерфейс IButtonSink, определенный элементом управления кнопкой push, чтобы уведомить клиентов о своих событиях. Например, объект кнопки вызывает IButtonSink::OnClick в объекте приемника клиента, когда пользователь нажимает кнопку на экране. Элемент управления кнопкой определяет исходящий интерфейс. Чтобы клиент кнопки обрабатывал событие, клиент должен реализовать этот исходящий интерфейс в объекте приемника, а затем подключить этот приемник к элементу управления кнопки. Затем, когда события происходят в кнопке, кнопка вызовет приемник, в то время как клиент может выполнить любое действие, которое он хочет назначить этой кнопке.

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

Дополнительные сведения см. в следующих разделах: