Freigeben über


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.

ATL-Struktur

HinweisHinweis

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:

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

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.

Siehe auch

Weitere Ressourcen

ATL-Konzepte