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


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

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

Образец атрибутов ATLDuck состоит из двух проектов: atlduck и duck. Проект duck создает экземпляр объекта, который реализует интерфейс IDuckInt. Этот интерфейс содержит четыре функции-члена: Flap, Paddle, Quack и Walk.

Второй проект, atlduck, содержит точку подключения для интерфейса IDuckInt (иными словами, он может использовать этот интерфейс, но не реализует его). Будет создан только один экземпляр этого объекта. После установления соединения между двумя приложениями проект atlduck будет вызывать функции в интерфейсе IDuckInt для приемников, которые вызвали метод IConnectionPoint::Advise.

В образце ATLDuck показаны различные атрибуты IDL, атрибуты COM и атрибуты компилятора, в том числе aggregatable, event_source и event_receiver. Для класса DuckInt статистическая обработка отключена путем указания атрибута aggregratable("never"). Класс DuckDoer помечен атрибутом com event_source, а класс DuckInt — атрибутом com event_receiver, без указания атрибута layout dependent=true.

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

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

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

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

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

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

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

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

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

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

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

  2. В меню Построение выберите команду Построить решение. Будут построены оба проекта и выполнена необходимая регистрация. Будут созданы следующие файлы:

    • atlduck.exe (EXE-сервер);

    • duck.exe (EXE-клиент).

Запуск этого образца

  1. В меню Отладка выберите команду Запуск без отладки. Будет запущен сервер atlduck и один экземпляр клиента duck. Чтобы запустить дополнительные клиенты, перейдите в каталог, где находится файл duck.exe, и запустите его вручную из командной строки.

  2. Появится диалоговое окно. В этом диалоговом окне нажмите кнопку Create DoDuck Object. После нажатия кнопки приложение создаст экземпляр объекта класса ID CLSID_DuckDoer, запускающего atlduck.

  3. Откроется новое диалоговое окно, вызванное atlduck.exe. В этом диалоговом окне расположена кнопка для каждой функции в интерфейсе IDuckInt, а также список подключений к активным приемникам и их файлов cookie. В диалоговых окнах duck можно выбрать команду Advise или Unadvise для точки подключения. В зависимости от этого выбора будет включено или отключено получение уведомлений от источников. Получаемые уведомления будут показываться в поле редактирования состояния. Кроме того, в приложении ATLDuck показано значение файла cookie, переданного точкой подключения во время оповещения подключения.

Атрибуты

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

  • ATLDuck:   aggregatable, coclass, dispinterface, event_source, exe, helpstring, id, module, name, progid, uuid, vi_progid

  • ATLDuck/Duck:   aggregatable, coclass, default, dispinterface, event_receiver, exe, helpstring, id, iid_is, in, module, name, object, out, progid, unique, uuid, version, vi_progid

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

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

CDialog (MFC), CComObject (ATL), IConnectionPointImpl<CDuckDoer> (ATL)

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

_ASSERTE; _tcslen; _VERIFY; AddRef; Advise; BEGIN_COM_MAP; BEGIN_CONNECTION_POINT_MAP; BEGIN_MSG_MAP; BEGIN_OBJECT_MAP; CComCoClass; CComModule::Unlock; CComObjectRootEx; CDialogImpl; CenterWindow; CoInitialize; COM_INTERFACE_ENTRY; COM_INTERFACE_ENTRY_IMPL; COMMAND_HANDLER; COMMAND_ID_HANDLER; CONNECTION_POINT_ENTRY; CoSuspendClassObjects; CoUninitialize; Create; DECLARE_CLASSFACTORY_SINGLETON; DECLARE_NOT_AGGREGATABLE; DECLARE_REGISTRY_RESOURCEID; DestroyWindow; DispatchMessage; EnableWindow; END_COM_MAP; END_CONNECTION_POINT_MAP; END_MSG_MAP; END_OBJECT_MAP; ExitProcess; FindConnectionPoint; GetCommandLine; GetDC; GetDlgItem; GetMessage; GetTextExtentPoint32; IConnectionPointContainerImpl; IConnectionPointImpl; Init; IsWindowVisible; MESSAGE_HANDLER; MessageBox; OBJECT_ENTRY; OleInitializeCoCreateInstance; OnCancel; OnFlap; OnInitDialog; OnOK; OnPaddle; OnWalk OnQuack; PostThreadMessage; QueryInterface; RecalcListboxExtent; RegisterClassObjects; RegisterServer; reinterpret_cast; ReleaseDC; RevokeClassObjects; SendMessage; SetOwner; SetWindowText; ShowStatus; ShowWindow; Unadvise; UnregisterServer; UNUSED_ALWAYS; UpdateRegistryFromResource; UpdateWindow; USES_CONVERSION

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

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

См. также

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

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