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


Образец атрибутов DispSink: обработка событий, инициируемых с одноэлементного COM-сервера через интерфейс диспетчера

Обновлен: Ноябрь 2007

В образце атрибутов DispSink демонстрируется одноэлементный серверный объект (объект, который может иметь только один экземпляр) со своим собственным сдвоенным интерфейсом и интерфейсом диспетчера, используемым для инициирования событий.

Образец DispSink представляет собой версию данного образца без атрибутов.

ayd83abw.alert_note(ru-ru,VS.90).gifПримечание.

Некоторые образцы, включая данный, не модифицировались с учетом изменений в мастерах, библиотеках и компиляторе Visual C++, однако по-прежнему демонстрируют выполнение требуемой задачи.

ayd83abw.alert_security(ru-ru,VS.90).gifПримечание о безопасности.

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

Чтобы получить образцы и инструкции по их установке, выполните следующие действия.

  • В меню Справка среды Visual Studio выберите пункт Примеры.

    Дополнительные сведения см. в разделе Поиск файлов примеров.

  • Самая последняя версия и полный список образцов доступны в Интернете на странице образцов Visual Studio 2008.

  • Кроме того, образцы находятся на жестком диске компьютера. По умолчанию образцы кода и файл Readme копируются в папку, находящуюся в папке \Program Files\Visual Studio 9.0\Samples\. Все образцы кода для экспресс-выпусков Visual Studio находятся в Интернете.

Построение и запуск образца

Построение и запуск этого образца

  1. Откройте файл решения DispSink.sln.

  2. В меню Построение выберите команду Построить решение.

  3. Откройте несколько экземпляров тестового контейнера элементов ActiveX и в каждый экземпляр вставьте клиентский элемент управления DispCtl. Сведения о доступе к тестовому контейнеру см. в разделе Тестирование свойств и событий при помощи тестового контейнера.

  4. Вызовите метод Connect для всех элементов управления.

  5. Вызовите метод Send для одного из элементов управления. В поле Тип параметра диалогового окна Вызов методов задайте значение VT_BSTR и затем введите в поле Значение параметра произвольную строку. Нажмите кнопку Invoke. Введенная строка появится в центре каждого подключенного элемента управления.

  6. Вызовите метод Disconnect для всех элементов управления, прежде чем удалять их.

Принцип работы образца

Сервер представляет собой одноэлементный объект, у которого имеется собственный сдвоенный интерфейс, а также интерфейс диспетчера, используемый для инициирования событий. Интерфейс диспетчера помещается в IDL-файл, задаваемый с помощью атрибута dispinterface. Серверный объект получает данные с помощью метода Send своего сдвоенного интерфейса и передает их во все подключенные компоненты посредством события Transfer в интерфейсе диспетчера. Dispserver использует атрибут event_source, а Dispclient — атрибут event_receiver.

Клиент представляет собой элемент ActiveX, содержащий серверный объект. Этот элемент управления реагирует на событие Transfer, инициированное серверным объектом. У него имеется сдвоенный интерфейс, включающий методы Connect, Send и Disconnect. Если событие Transfer инициируется с использованием объекта Variant, содержащего строку BSTR, эта строка отображается в центре элемента управления.

Атрибуты

В этом образце используются следующие атрибуты:

  • DISPSINK/DispClient   coclass, dual, event_receiver, helpstring, id, module, object, pointer_default, registration_script, threading, uuid, version, vi_progid

  • DISPSINK/DispServer   coclass, default, dispinterface, dual, event_source, helpstring, id, module, object, pointer_default, threading, uuid, vi_progid

Ключевые слова

В этом образце используются следующие ключевые слова:

#import; CComAutoThreadModule; CComSimpleThreadAllocator; CoCreateInstance; DECLARE_CLASSFACTORY_AUTO_THREAD; FireViewChange

См. также

Другие ресурсы

Образцы атрибутов ATL