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.

Diagram of the classes and interfaces used to define an A T L object.

Hinweis

Dieses Diagramm zeigt, dass CComObject aus der Erwägung CComAggObject abgeleitet und CComPolyObject als Membervariable eingeschlossen CYourClassCYourClass 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:

Andere Aspekte Ihres ATL-COM-Objekts werden von anderen Klassen behandelt:

In diesem Abschnitt

Implementieren von CComObjectRootEx
Beispiel für COM-Zuordnungseinträge für die Implementierung CComObjectRootExanzeigen.

Implementieren von CComObject, CComAggObject und CComPolyObject
Erläutert, wie sich die DECLARE_*_AGGREGATABLE Makros auf die Verwendung von CComObject, und CComAggObjectCComPolyObject.

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.

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.

Siehe auch

Konzepte