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


Образец атрибутов CONNECT: демонстрация реализации и использования точек подключения

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

В образец атрибутов CONNECT показана реализация и использование точек подключения (интерфейсов IConnectionPointContainer и IConnectionPoint) в многопоточной среде.

В образце показано несколько широко применяемых атрибутов IDL, COM и компилятора, включая support_errorinfo, event_source и event_receiver.

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

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

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

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

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

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

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

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

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

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

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

  3. Выберите клиент для запуска (Drive или MDrive) и сделайте его запускаемым проектом (щелкните папку проекта правой кнопкой мыши и выберите команду Назначить запускаемым проектом). Дополнительные сведения о клиентах находятся в подразделе "Принцип работы образца".

  4. В меню Отладка выберите пункт Запуск без отладки.

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

Сервер реализован в файле Connect.dll. Эта библиотека DLL позволяет создать COM-объект CoRandom, реализованный в классе C++ CRandom. COM-объект поддерживает сдвоенный интерфейс IRandom и интерфейс IConnectionPointContainer, а также принимает подключения для интерфейса IRandomEvent.

Интерфейс IRandom поддерживает следующие методы:

  • Start — запускает поток внутри объекта;

  • Stop — останавливает поток внутри объекта;

  • StopAll — останавливает все выполняющиеся потоки.

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

Предоставляются два клиента: Drive и MDrive. Они находятся во вложенных каталогах Drive и MDrive.

  • Drive.exe является простым консольным приложением, которое предоставляет один объект, реализующий интерфейс IRandomEvent. Оно создает объект CoRandom, вызывает методы Advise и Unadvise в точке подключения и запускает в объекте CoRandom передачу событий в объект Drive.

  • Mdrive.exe является приложением MFC на основе диалоговых окон, которое может создавать несколько приемников уведомлений и управлять количеством потоков, создаваемых сервером. После запуска Mdrive.exe нажмите кнопку Start по крайней мере один раз, а затем несколько раз нажмите кнопку Advise. При каждом нажатии кнопки Advise добавляется точка подключения, в результате чего увеличивается ширина экрана. Если не нажать кнопку Advise, на экране не будет отображаться никаких действий.

Атрибуты

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

  • Connect:   coclass, default, dll, dual, event_source, helpstring, id, in, module, name, object, out, pointer_default, progid, support_error_info, uuid, vi_progid

  • Connect/drive:   event_receiver, module

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

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

AfxGetApp; AfxMessageBox; AtlAdvise; ATLASSERT; AtlUnadvise; BEGIN_COM_MAP; BEGIN_CONNECTION_POINT_MAP; BEGIN_MESSAGE_MAP; BEGIN_OBJECT_MAP; CComCoClass; CComModule::GetClassObject; CComModule::GetLockCount; CComModule::Init; CComModule::RegisterServer; CComModule::Term; CComModule::UnregisterServer; CComObject::CreateInstance; CComObjectRoot; CDialog::OnCancel; CDialog::OnOK; CloseHandle; CoCreateInstance; COleTemplateServer::RegisterAll; COM_INTERFACE_ENTRY; COM_INTERFACE_ENTRY_IMPL; COM_INTERFACE_ENTRY2; CONNECTION_POINT_ENTRY; CoUninitialize; CreateEvent; CreateThread; DECLARE_REGISTRY_RESOURCEID; DisableThreadLibraryCalls; DoModal; DrawIcon; END_COM_MAP; END_CONNECTION_POINT_MAP; END_MESSAGE_MAP; END_OBJECT_MAP; GdiFlush; GetClientRect; GetDlgItem; GetTickCount; GetUnknown; IConnectionPointContainerImpl; IConnectionPointImpl; IDispatchImpl; ISupportErrorInfo; LoadIcon; Lock; memset; OBJECT_ENTRY; ON_COMMAND; puts; ReleaseDC; SendMessage; SetEvent; SetIcon; SetPixel; Sleep; Unadvise; Unlock; WaitForSingleObject

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

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

См. также

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

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