Grundlagen von ATL-COM-Objekten
Die folgende Abbildung stellt die Beziehung zwischen den Klassen und Schnittstellen dar, die verwendet werden, um ein ATL COM-Objekt zu definieren.
Hinweis |
---|
Dieses Diagramm zeigt, dass CComObject von CYourClass abgeleitet wird, während CComAggObject und CComPolyObjectCYourClass als Membervariable einschließen. |
Es gibt drei Möglichkeiten, ein ATL COM-Objekt zu definieren.Die Standardoption ist, die CComObject-Klasse zu verwenden, die von CYourClass abgeleitet wird.Die zweite Option ist, ein zusammengesetztes Objekt erstellen, indem sie die CComAggObject-Klasse verwendet.Die dritte Option besteht darin, die CComPolyObject-Klasse zu verwenden.CComPolyObject fungiert als ein Hybrid aus auf: kann nur als CComObject-Klasse oder als CComAggObject-Klasse, je nachdem, wie sie zuerst erstellt wird.Weitere Informationen über die Verwendung der CComPolyObject-Klasse finden Sie unter CComPolyObject-Klasse.
Wenn Sie Standard ATL COM verwenden, verwenden Sie zwei Objekte: ein äußeres Objekt und ein inneres Objekt.Durch externe Clients greifen auf die Funktionalität des inneren Objekts durch die Wrapperfunktionen zu, die im äußeren Objekt definiert werden.Das äußere Objekt ist vom Typ CComObject.
Wenn Sie ein zusammengesetztes Objekt verwenden, erstellt das äußere Objekt Wrapper nicht für die Funktionalität des inneren Objekts bereit.Stattdessen stellt das äußere Objekt einen Zeiger, auf den direkt von Clients zugegriffen wird.In diesem Szenario ist das äußere Objekt vom Typ CComAggObject.Das innere Objekt ist eine Membervariable des äußeren Objekts, und es ist vom Typ CYourClass.
Da der Client nicht das äußere Objekt durchlaufen, muss mit dem inneren Objekt zu interagieren, sind zusammengesetzte Objekte normalerweise effizienter.Außerdem wird das äußere Objekt muss die Funktionalität des zusammengesetzten Objekts nicht kennen, vorausgesetzt, die Schnittstelle des zusammengesetzten Objekts direkt an den Client verfügbar ist.Allerdings können nicht alle Objekte aggregiert werden.Damit ein Objekt aggregiert werden kann, muss es mit Aggregation im Auge entworfen.
ATL implementiert IUnknown in zwei Phasen:
CComObject, CComAggObject oder CComPolyObject implementiert die IUnknown-Methoden.
CComObjectRoot oder CComObjectRootEx verwaltet den Verweiszähler und die äußeren Zeiger von IUnknown.
Andere Aspekte des ATL-COM-Objekts werden durch andere Klassen behandelt:
CComCoClass definiert Standardklassendie factory des Objekts und zum Aggregationsmodell.
IDispatchImpl stellt eine Standardimplementierung des IDispatch Interface Teils aller duale Schnittstellen für das Objekt bereit.
ISupportErrorInfoImplISupportErrorInfo implementiert die Schnittstelle, die sicherstellt, dass Fehlerinformationen in der Aufrufkette ordnungsgemäß weitergegeben werden können.
In diesem Abschnitt
Implementieren von CComObjectRootEx
wird eine COM-Zuordnungs-Einträge zum Implementieren von CComObjectRootEx.Implementieren von CComObject, von CComAggObject und von CComPolyObject
Erläutert, wie die DECLARE_*_AGGREGATABLE-Makros die Verwendung von CComObject, von CComAggObject und von CComPolyObject auswirken.Sichern von IDispatch und von IErrorInfo
Listet die ATL-Implementierungsklassen auf, um zum Sichern IDispatch und der IErrorInfo-Schnittstellen.Unterstützung von IDispEventImpl
Erläutert die Schritte, um einen Verbindungspunkt für die Klasse implementieren.Ändern der Standardklassen-Factorys und des Aggregations-Modells
Erläutert, welche, um die Standardklassenfactory und -Aggregation ändern zu verwenden Sie Makros modellieren.Erstellen eines zusammengesetzten Objekts
Führt die Schritte zum Erstellen eines zusammengesetzten Objekts auf.
Verwandte Abschnitte
Erstellen eines ATL-Projekts
Stellt Informationen zum Erstellen eines ATL-COM-Objekts bereit.ATL
Enthält Links zu konzeptionellen Themen darüber, wie mit Active Template Library Programmierung.