Grundlagen von ARL COM-Objekten
Die folgende Abbildung zeigt die Beziehung zwischen den Klassen und Schnittstellen, die zum Definieren eines ATL-COM-Objekts verwendet werden.
Hinweis
Dieses Diagramm zeigt, dass CComObject
aus der Erwägung CComAggObject
abgeleitet und CComPolyObject
als Membervariable eingeschlossen CYourClass
CYourClass
wird.
Es gibt drei Möglichkeiten zum Definieren eines ATL-COM-Objekts. Die Standardoption besteht darin, die CComObject
Klasse zu verwenden, die von CYourClass
. Die zweite Option besteht darin, mithilfe der CComAggObject
Klasse ein aggregiertes Objekt zu erstellen. Die dritte Option besteht darin, die CComPolyObject
Klasse zu verwenden. CComPolyObject
fungiert als Hybrid: Sie kann je nach Erstellung als CComObject
Klasse oder Als CComAggObject
Klasse funktionieren. Weitere Informationen zur Verwendung der CComPolyObject
Klasse finden Sie unter "CComPolyObject Class".
Wenn Sie standardmäßigES ATL-COM verwenden, verwenden Sie zwei Objekte: ein äußeres Objekt und ein inneres Objekt. Externe Clients greifen über die Wrapperfunktionen, die im äußeren Objekt definiert sind, auf die Funktionalität des inneren Objekts zu. Das äußere Objekt ist vom Typ CComObject
.
Wenn Sie ein aggregiertes Objekt verwenden, stellt das äußere Objekt keine Wrapper für die Funktionalität des inneren Objekts bereit. Stattdessen stellt das äußere Objekt einen Zeiger bereit, auf den direkt von externen 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 ist vom Typ CYourClass
.
Da der Client das äußere Objekt nicht durchlaufen muss, um mit dem inneren Objekt zu interagieren, sind aggregierte Objekte in der Regel effizienter. Außerdem muss das äußere Objekt die Funktionalität des aggregierten Objekts nicht kennen, da die Schnittstelle des aggregierten Objekts direkt für den Client verfügbar ist. Nicht alle Objekte können jedoch aggregiert werden. Damit ein Objekt aggregiert werden kann, muss es unter Berücksichtigung der Aggregation entworfen werden.
ATL implementiert IUnknown in zwei Phasen:
CComObject, CComAggObject oder CComPolyObject implementiert die
IUnknown
Methoden.CComObjectRoot oder CComObjectRootEx verwaltet die Referenzanzahl und äußere Zeiger von
IUnknown
.
Andere Aspekte Ihres ATL-COM-Objekts werden von anderen Klassen behandelt:
CComCoClass definiert das Standardklassen-Factory- und Aggregationsmodell des Objekts.
IDispatchImpl stellt eine Standardimplementierung des
IDispatch Interface
Teils aller dualen Schnittstellen für das Objekt bereit.ISupportErrorInfoImpl implementiert die
ISupportErrorInfo
Schnittstelle, die sicherstellt, dass Fehlerinformationen ordnungsgemäß an die Anrufkette weitergegeben werden können.
In diesem Abschnitt
Implementieren von CComObjectRootEx
Beispiel für COM-Zuordnungseinträge für die Implementierung CComObjectRootEx
anzeigen.
Implementieren von CComObject, CComAggObject und CComPolyObject
Erläutert, wie sich die DECLARE_*_AGGREGATABLE Makros auf die Verwendung von CComObject
, und CComAggObject
CComPolyObject
.
Unterstützen von IDispatch und IErrorInfo
Listet die ATL-Implementierungsklassen auf, die für die Unterstützung der IDispatch
Und IErrorInfo
Schnittstellen verwendet werden sollen.
Unterstützen von IDispEventImpl
Erläutert die Schritte zum Implementieren eines Verbindungspunkts für Ihre Klasse.
Ändern der Standardklassenfactory und Aggregationmodell
Zeigen Sie an, welche Makros zum Ändern des Standardklassenfactory- und Aggregationsmodells verwendet werden sollen.
Erstellen eines aggregierten Objekts
Listet die Schritte zum Erstellen eines aggregierten Objekts auf.
Verwandte Abschnitte
Erstellen eines ATL-Projekts
Enthält Informationen zum Erstellen eines ATL-COM-Objekts.
ATL
Enthält Links zu konzeptionellen Themen über die Programmierung mit der Active Template Library.