Share via


MFCATL-Beispiel: Verwendet ATL-COM-Objekte in einem MFC-Server

Aktualisiert: November 2007

Das MFCATL-Beispiel veranschaulicht die Verwendung von ATL-COM-Objekten in einer MFC-Server-EXE.

Der Server ermöglicht die Erstellung von zwei Objekten: ObjectOne (ist in MFC implementiert und unterstützt eine Disp-Schnittstelle) und ObjectTwo (ist in ATL implementiert und unterstützt eine duale Schnittstelle).

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 und Ausführen des Beispiels

So erstellen Sie das Beispiel und führen es aus

  1. Öffnen Sie die Projektmappendatei mfcatl.sln.

  2. Klicken Sie im Menü Erstellen auf Projektmappe erstellen.

  3. Klicken Sie im Menü Debuggen auf Starten ohne Debuggen. Dadurch wird der Server mfcatl.exe eigenständig ausgeführt und registriert.

  4. Um einen Aufruf an die geeigneten Objekte auszuführen, öffnen Sie im Webbrowser die Datei mfcatl.htm und klicken auf die entsprechenden Schaltflächen. Sie können die Objekte einzeln oder zusammen aufrufen.

Konvertierungshinweise

Ursprünglich waren beide MFCATL-Objekte in MFC implementiert. Beide waren Ableitungen von CCmdTarget. ObjectTwo wurde mithilfe von ATL folgendermaßen neu implementiert:

  1. Einfügen der ATL-Headerdateien (Atlbase.h und Atlcom.h) in Premfcat.h.

  2. Einfügen von Atlimpl.cpp in Premfcat.cpp.

  3. Einfügen einer von CComModule abgeleiteten Klasse in Prefcat.h (ähnlich wie im EXE-Beispiel BEEPER). Die abgeleitete Klasse implementiert die Lock-Methode und die Unlock-Methode, um durch den Aufruf von AfxOleLockApp und AfxOleUnlockApp die Sperrenanzahl an MFC weiterzuleiten.

  4. Einfügen von zwei Objektzuordnungsmakros (BEGIN_OBJECT_MAP/END_OBJECT_MAP) sowie einer statischen Instanz der Modulklasse _Module in Mfcatl.cpp.

  5. Aufrufen von _Module.Init und Term von InitInstance und ExitInstance aus.

  6. Einfügen der Typbibliothek als Ressource.

  7. Aufrufen von _Module.RegisterServer(TRUE) von InitInstance aus, damit eine Übereinstimmung mit dem MFC-Aufruf an COleObjectFactory::UpdateRegistryAll vorliegt.

  8. Aufrufen von _Module.RegisterClassObjects(CLSCTX_LOCAL_SERVER, REGCLS_MULTIPLEUSE) in Übereinstimmung mit REGCLS_MULTIPLEUSE der MFC-Klassenfactories, wird vom IMPLEMENT_OLECREATE-Makro implizit ausgeführt.

  9. Erneutes Implementieren von ObjectTwo in ATL durch Ausführen der folgenden Schritte:

    • Ändern der Disp-Schnittstelle in eine duale Schnittstelle für die ODL-Datei.

    • Generieren einer von ATL benötigten Headerdatei (Interf.h) durch die ODL-Kompilierung.

    • Erneutes Schreiben der H- und CPP-Dateien. (Am schnellsten geht es, wenn Sie die ATL-Assistenten ausführen und den automatisch generierten Code anstelle des ursprünglichen MFC-Codes kopieren, einfügen und neu benennen.)

    • Einfügen eines OBJECT_ENTRY(CLSID_ObjectTwo, CObjectTwo) in die ATL-Objektzuordnung.

Weitere Konvertierungsschritte, die hier nicht vorgestellt werden, sind u. a.:

  • Das Portieren der ODL-Datei auf IDL-Format.

  • Das Bereitstellen der Unterstützung für -RegServer- und -UnregServer-Befehlszeilenargumente.

Schlüsselwörter

In diesem Beispiel werden die folgenden Schlüsselwörter verwendet:

AfxMessageBox; AfxOleInit; AfxOleLockApp; AfxOleUnlockApp; ASSERT; BEGIN_COM_MAP; CCmdTarget; CCmdTarget::OnFinalRelease; CComCoClass; CComModule; CComModule::GetLockCount; CComModule::Lock; CComModule::Unlock; CComObjectRoot; CDialog; CMenu::AppendMenu; COleObjectFactory::RegisterAll; COleObjectFactory::UpdateRegistryAll; COM_INTERFACE_ENTRY; CString::IsEmpty; CString::LoadString; CWindow::GetSystemMenu; DECLARE_DYNCREATE; DECLARE_NOT_AGGREGATABLE; DECLARE_REGISTRY; DestroyWindow; EnableAutomation; GetClientRect; GetSystemMetrics; IDispatchImpl; PostMessage; SendMessage; SetIcon; ShowWindow; SysAllocString

Siehe auch

Weitere Ressourcen

ATL-Beispiele