ACDUAL-Beispiel: Fügt einer Automatisierungsanwendung duale Schnittstellen hinzu
Aktualisiert: November 2007
ACDual zeigt, wie einer MFC-basierten Automatisierungsanwendung (früher OLE-Automatisierung genannt) eine Unterstützung für duale Schnittstellen hinzugefügt wird. Die Projektmappe enthält die folgenden Projekte:
ACDualDriv – enthält eine Version des Automatisierungsclient-Projekts AUTODRIV, bei dem Sie auswählen können, ob Sie die Serveranwendung mit der Dispatchschnittstelle oder der Vtable-Bindung steuern möchten.
ACDual – enthält eine echte Version des Automatisierungsserver-Projekts AUTOCLIK mit Unterstützung für duale Schnittstellen.
Sicherheitshinweis: |
---|
Dieser Beispielcode dient dazu, ein Konzept zu veranschaulichen. Er sollte nicht für Anwendungen oder Websites verwendet werden, da dieser Code unter Umständen nicht die sicherste Codierungstechnik darstellt. Microsoft übernimmt keine Haftung für beiläufig entstandene Schäden oder Folgeschäden, falls der Beispielcode nicht bestimmungsgemäß verwendet wird. |
So rufen Sie Beispiele und Anweisungen für ihre Installation ab
Klicken Sie in Visual Studio im Menü Hilfe auf Beispiele.
Weitere Informationen finden Sie unter Suchen von Beispieldateien.
Die neueste Version und vollständige Liste mit Beispielen ist online unter Visual Studio 2008 Samples verfügbar.
Sie können auch Beispiele auf der Festplatte des Computers suchen. Standardmäßig werden Beispiele und eine Infodatei in einen Ordner unter \Programme\Visual Studio 9.0\Samples\ kopiert. Für Express Editions von Visual Studio sind alle Beispiele online verfügbar.
Erstellen des Beispiels
So erstellen Sie das ACDual-Beispiel
Öffnen Sie die Projektmappendatei acdual.sln, die sich im Verzeichnis acdual befindet.
Klicken Sie im Menü Erstellen auf Erstellen.
Führen Sie ACDual einmal als eigenständige Anwendung aus, damit es sich beim System registrieren kann.
Ausführen des Beispiels
Nach der Registrierung der Anwendung ACDual können Sie die Anwendung ACDualDriv ausführen. Durch das Erstellen der Projektmappe von der IDE aus wird ACDualDriv automatisch vor der Ausführung registriert. ACDualDriv startet die Anwendung ACDual und erstellt ein Document-Objekt, das Sie anschließend über die Benutzeroberfläche von ACDualDriv mithilfe der Automatisierung bearbeiten können. Darüber hinaus ist ein zusätzliches Kontrollkästchen enthalten, in dem Sie auswählen können, ob Sie für die Kommunikation mit dem Document-Objekt in ACDual eine VTBL-Bindung verwenden möchten.
Der ACDual-Server verwendet AUTOCLIK als Ausgangspunkt. Um eine Verwechslung mit dem ursprünglichen AUTOCLIK-Beispiel auszuschließen, wurden global eindeutige Bezeichner (Globally Unique Identifiers, GUIDs) generiert. Darüber hinaus wurden einige Ressourcenzeichenfolgen geändert, um klarzustellen, ob der ACDual-Server ausgeführt wird. Alle weiteren Änderungen an Quellcode werden mit Blockkommentaren wie dem folgenden markiert:
// DUAL_SUPPORT_START
... modified code goes here
// DUAL_SUPPORT_END
Weitere Informationen zu dualen Schnittstellen, ODL-Skripts und Automatisierungsfehler-Schnittstellen finden Sie unter Technischer Hinweis 65 (nur auf Englisch verfügbar).
Duale Schnittstellen
Mit einer dualen Schnittstelle können Sie eine IDispatch- oder eine VTBL-Schnittstelle implementieren. Für alle verfügbaren Automatisierungsobjekte wird eine duale Schnittstelle empfohlen. Aspekte, die bei der Implementierung einer dualen Schnittstelle zu beachten sind, werden in Technischer Hinweis 65 (nur auf Englisch verfügbar) erläutert, z. B.:
Implementieren der Unterstützung von dualen Schnittstellen für auf CCmdTarget basierende Klassen
Übergeben von Zeigern auf duale Schnittstellen
Aktivieren des typsicheren Bindens, einschließlich:
Registrieren des Typs der Anwendungsbibliothek
Ändern der Buildeinstellungen eines Projekts entsprechend den Änderungen in der Typbibliothek
Bestimmen des korrekten Objektklassennamens in einer Typbibliothek
Behandeln von Ausnahmen und der Automatisierungsfehlerschnittstelle
Weitere Informationen finden Sie unter den ActiveX-Themen Overview of Automation, Duale Schnittstellen, Automation Type Description Interfaces und dem Eintrag zum dual-Attribut in der ODL-Referenz.
Hinweis: |
---|
In diesem und einigen anderen Beispielen wurden die Änderungen an den Visual C++-Assistenten, -Bibliotheken und -Compilern noch nicht nachvollzogen. Sie demonstrieren aber dennoch, wie Sie die gewünschte Aufgabe durchführen können. |
Schlüsselwörter
Das ENROLL-Beispiel zeigt die Verwendung der folgenden Schlüsselwörter:
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
Das ACDualDriv-Beispiel demonstriert die Verwendung der folgenden Schlüsselwörter:
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