MFCATL-Beispiel: ATL COM-Objekten verwendet in einem MFC-Server
Das MFCATL-Beispiel veranschaulicht, wie ATL COM-Objekte in einer MFC-Server-EXE verwendet werden können.
Der Server ermöglicht die Erstellung von zwei Objekten: ObjectOne (implementiert in MFC und unterstützen eine dispinterface) und ObjectTwo (implementiert in ATL und unterstützt eine duale Schnittstelle).
Sicherheitshinweis |
---|
Dieser Beispielcode soll ein Konzept veranschaulichen, und es wird nur den Code, der für dieses Konzept relevant sind. Möglicherweise erfüllt dieser nicht die Sicherheitsanforderungen für eine bestimmte Umgebung, und er sollte nicht genau wie dargestellt verwendet werden. Wir empfehlen, Sicherheits- und Fehlerbehandlungscode hinzuzufügen, um Ihre Projekte sicherer und stabiler zu machen. Microsoft stellt diesen Beispielcode "Wie besehen"keine Garantien. |
So erhalten Sie Beispiele und Anweisungen für deren Installation:
Um Beispiele von Visual Studio zuzugreifen
im Menü Hilfe Menü klicken Beispiele.
Standardmäßig sind die Beispiele in installiert. Laufwerk: \Programme\Microsoft visual Studio 10.0\Samples\.
- Die neueste Version dieses Beispiels und eine Liste der anderen Beispiele finden Sie unter Visual Studio Samples auf der MSDN-Website.
Erstellen und Ausführen des Beispiels
So erstellen und im Beispiel führen
Öffnen Sie die Projektmappe Datei mfcatl.sln.
Erstellen Sie aus der Menü, und klicken Sie auf Projektmappe.
Debuggen Sie von Menü, klicken Sie auf Starten ohne Debuggen. Diese eigenständigen Server mfcatl.exe wird ausgeführt und ihn registrieren.
Öffnen Sie mfcatl.htm Datei in Ihrem Webbrowser, und klicken Sie auf die Schaltflächen, um entsprechende Objekte aufrufen. Sie können jedes Objekt einzeln aufrufen oder beides gleichzeitig.
Konvertierung hinweisen
Ursprünglich waren beide MFCATL-Objekte in MFC implementiert. Beide wurden von CCmdTarget abgeleitet. ObjectTwo wurde neu mithilfe von ATL folgendermaßen implementiert:
Schließen Sie die ATL-Headerdateien (atlbase.h und Atlcom.h) in Premfcat.h.
Fügen Sie Atlimpl.cpp in Premfcat.cpp.
Hinzufügen eines CAtlModule https://msdn.microsoft.com/de-de/library/hhz4ew64(v=vs.100)-abgeleitete Klasse in Prefcat.h. Die abgeleitete Klasse implementiert die Lock und Unlock Methoden Sperrenanzahl an MFC weiterzuleiten, durch Aufrufen von AfxOleLockApp und AfxOleUnlockApp.
Hinzufügen einer Zuordnung Makro Objektpaares (BEGIN_OBJECT_MAP/END_OBJECT_MAP) in Mfcatl.cpp und fügen Sie eine statische Instanz der Modulklasse _Module aufgerufen.
_Module.Init und TermInitInstance und ExitInstance aufrufen.
Die Typbibliothek als Ressource hinzu.
Rufen Sie _Module.RegisterServer(TRUE)InitInstance entsprechend den MFC-Aufruf von COleObjectFactory::UpdateRegistryAll.
_Module.RegisterClassObjects(CLSCTX_LOCAL_SERVER, REGCLS_MULTIPLEUSE) entsprechend der REGCLS_MULTIPLEUSE von MFC Klassenfactories, als implizit durchgeführt, indem das Makro IMPLEMENT_OLECREATE aufrufen.
Implementieren Sie ObjectTwo in ATL, indem Sie die folgenden Schritte:
Ändern Sie die ODL-Datei von dispinterface in duale Schnittstelle.
Haben Sie die ODL-Kompilierung eine Headerdatei (Interf.h) von ATL benötigten generieren
Schreiben Sie h und CPP-Dateien (am schnellsten ist führen Sie die ATL-Assistenten kopieren und einfügen, und benennen Sie den automatisch generierten Code anstelle der ursprünglichen MFC-Code).
Die ATL-Objektzuordnung ein OBJECT_ENTRY(CLSID_ObjectTwo, CObjectTwo) hinzugefügt.
Zusätzliche Konvertierung Schritte (hier nicht behandelt) möglicherweise umfassen:
Portieren der ODL-Datei in IDL-Format.
Hinzufügen von 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