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


Образец ACDUAL: добавление сдвоенных интерфейсов в приложение автоматизации

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

В образце ACDual показано, как добавить поддержку сдвоенных интерфейсов в приложение автоматизации на основе MFC (ранее называвшейся OLE-автоматизацией). Решение состоит из следующих проектов.

  • ACDualDriv, который содержит версию проекта AUTODRIV клиента автоматизации, позволяющего выбрать метод управления приложением сервера: с помощью интерфейса диспетчеризации или посредством привязки vtable.

  • ACDual, который содержит фактическую версию проекта AUTOCLIK сервера автоматизации с поддержкой сдвоенных интерфейсов.

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

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

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

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

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

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

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

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

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

  1. Откройте решение acdual.sln, расположенное в каталоге acdual.

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

  3. Запустите ACDual в качестве изолированного приложения, чтобы оно могло зарегистрироваться в системе.

Выполнение образца

После регистрации приложения ACDual все готово к запуску приложения ACDualDriv. В ходе построения решения в интегрированной среде разработки регистрация ACDualDriv выполняется автоматически перед запуском ACDualDriv. Приложение ACDualDriv запускает приложение ACDual и создает объект Document, с которым можно работать средствами автоматизации в пользовательском интерфейсе ACDualDriv. Оно также содержит дополнительный флажок, который позволяет выбрать, будет ли использоваться привязка VTBL для связи с объектом ACDual Document.

Сервер ACDual в качестве точки запуска использует AUTOCLIK. Были созданы новые глобальные уникальные идентификаторы (GUID), чтобы избежать конфликтов с исходным образцом AUTOCLIK, а также были изменены некоторые строки ресурсов, чтобы указать, работает ли сервер ACDual. Все остальные изменения в исходных файлах помечены блоками комментария, подобными следующему:

      // DUAL_SUPPORT_START
      ... modified code goes here
      // DUAL_SUPPORT_END

Дополнительные сведения о сдвоенных интерфейсах, сценариях на языке описания объектов (ODL) и интерфейсах ошибок автоматизации см. в статье Технические заметки 65.

Сдвоенные интерфейсы

Сдвоенный интерфейс позволяет реализовать интерфейс IDispatch или интерфейс VTBL. Применение сдвоенного интерфейса настоятельно рекомендуется для всех доступных объектов автоматизации. Вопросы, относящиеся к реализации сдвоенного интерфейса, обсуждаются в статье Технические заметки 65. К их числу относятся следующие.

  • Реализация поддержки сдвоенных интерфейсов для классов, основанных на CCmdTarget

  • Передача указателей на сдвоенные интерфейсы

  • Включение строго типизированной привязки, в том числе:

    • регистрация типа библиотеки приложения;

    • изменение параметров построения проекта в соответствии с изменениями библиотеки типов;

    • указание правильного имени класса объекта в библиотеке типов.

  • Обработка исключений и интерфейс ошибок автоматизации

Дополнительные сведения см. в разделах ActiveX Overview of Automation, Сдвоенные интерфейсы, Automation Type Description Interfaces и в разделе справочника по языку ODL для атрибута dual.

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

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

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

В образце ACDual показаны следующие ключевые слова:

AfxMessageBox; AfxOleInit; AfxOleLockApp; AfxOleUnlockApp; CCmdTarget::EnableAutomation; CCmdTarget::FromIDispatch; CCmdTarget::GetIDispatch; CCmdTarget::OnFinalRelease; CControlBar::EnableDocking; CControlBar::GetBarStyle; CControlBar::SetBarStyle; CDialog::DoModal; CDocument::GetFirstViewPosition; CDocument::GetNextView; CDocument::OnNewDocument; CDocument::SetModifiedFlag; CDocument::UpdateAllViews; CFrameWnd::ActivateFrame; CFrameWnd::DockControlBar; CFrameWnd::EnableDocking; CFrameWnd::LoadFrame; CObject::AssertValid; CObject::Dump; CObject::IsKindOf; CObject::Serialize; COleTemplateServer::ConnectTemplate; COleTemplateServer::UpdateRegistry; CStatusBar::Create; CStatusBar::SetIndicators; CToolBar::Create; CView::DoPreparePrinting; CView::GetDocument; CView::OnBeginPrinting; CView::OnDraw; CView::OnEndPrinting; CView::OnPreparePrinting; CWinApp::AddDocTemplate; CWinApp::EnableShellOpen; CWinApp::InitInstance; CWinApp::LoadStdProfileSettings; CWinApp::RegisterShellFileTypes; CWnd::DoDataExchange; CWnd::GetParentFrame; CWnd::OnCreate; CWnd::OnLButtonDown; CWnd::PreCreateWindow; CWnd::ShowWindow; CWnd::UpdateWindow; DragAcceptFiles; ShowWindow; TextOut

В образце ACDualDriv показаны следующие ключевые слова:

AfxGetApp; AfxMessageBox; AfxOleInit; CDC::DrawIcon; CDC::GetSafeHdc; CDialog::DoModal; CDialog::EndDialog; COleDispatchDriver::AttachDispatch; COleDispatchDriver::GetProperty; COleDispatchDriver::InvokeHelper; COleDispatchDriver::SetProperty; CRect::Height; CRect::Width; CWinApp::InitInstance; CWinApp::LoadStdProfileSettings; CWnd::DoDataExchange; CWnd::GetClientRect; CWnd::IsIconic; CWnd::OnClose; CWnd::OnCreate; CWnd::OnPaint; CWnd::OnQueryDragIcon; CWnd::SendMessage; CWnd::ShowWindow; CWnd::UpdateData; GetSystemMetrics; LoadIcon; ShowWindow

См. также

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

Примеры MFC