Freigeben über


CComObjectRootEx Class

Diese Klasse stellt Methoden zum Handleobjektverweis-Anzahlverwaltung für nicht aggregiertes und zusammengesetzte Objekte bereit.

template< 
   class ThreadModel  
> 
class CComObjectRootEx : public CComObjectRootBase

Parameter

Mitglieder

Methoden

CComObjectRootEx

Konstruktor.

InternalAddRef

Inkrementiert den Verweiszähler für ein nicht aggregiertes Objekt.

InternalRelease

Dekrementiert den Verweiszähler für ein nicht aggregiertes Objekt.

Sperren

Wenn das Threadmodell eine Multithreadkomponente ist, erhält den Besitz einer kritischen Abschnittsobjekts.

Entsperren Sie

Wenn das Threadmodell eine Multithreadkomponente ist, gibt den Besitz einer kritischen Abschnittsobjekts frei.

CComObjectRootBase-Methoden

FinalConstruct

Überschreibung in der Klasse, um jede Initialisierung auszuführen erfordert durch das Objekt.

FinalRelease

Überschreibung in der Klasse, um alle auszuführen bereinigen erforderliches durch das Objekt.

OuterAddRef

Inkrementiert den Verweiszähler für ein zusammengesetztes Objekt.

OuterQueryInterface

Delegaten zu äußeren IUnknown eines zusammengesetzten Objekts.

OuterRelease

Dekrementiert den Verweiszähler für ein zusammengesetztes Objekt.

Statische Funktionen

InternalQueryInterface

Delegaten zu IUnknown eines nicht aggregierten Objekts.

ObjectMain

Aufgerufen während der Modulinitialisierung und - beendung für die abgeleiteten Klassen aufgeführt in der Objektzuordnung.

Datenmember

m_dwRef

Mit m_pOuterUnknown Teil einer Union. Wird verwendet, wenn das Objekt nicht aggregiert wird, um den Verweiszähler von AddRef und von Release aufzunehmen.

m_pOuterUnknown

Mit m_dwRef Teil einer Union. Wird verwendet, wenn das Objekt aggregiert wird, um einen Zeiger auf den äußeren Unbekannten aufzunehmen.

Hinweise

CComObjectRootEx Handleobjektverweis-Anzahlverwaltung für nicht aggregiertes und zusammengesetzte Objekte. Sie enthält die Objektverweisanzahl, wenn das Objekt nicht aggregiert wird, und enthält den Zeiger des äußeren Unbekannten an, wenn das Objekt aggregiert wird. Für zusammengesetzte Objekte können CComObjectRootEx-Methoden verwendet werden, um den Fehler des inneren Objekts dem Konstrukt zu behandeln, und das äußere Objekt vom Löschen, wenn innere Schnittstellen freigegeben werden oder das innere Objekt zu schützen wird gelöscht.

Eine Klasse, die einen COM-Server implementiert, muss von CComObjectRootEx oder von CComObjectRoot erben.

Wenn die Klassendefinition das DECLARE_POLY_AGGREGATABLE-Makro angibt, ATL erstellt eine Instanz von CComPolyObject<CYourClass>, wenn IClassFactory::CreateInstance aufgerufen wird. Bei der Erstellung wird der Wert des äußeren Unbekannten überprüft. Wenn es NULL ist, wird IUnknown für ein aggregiertes Objekt nicht implementiert. Wenn das äußere Unbekannte nicht NULL ist, wird IUnknown für ein zusammengesetztes Objekt implementiert.

Wenn die Klasse nicht das DECLARE_POLY_AGGREGATABLE-Makro angibt, ATL erstellt eine Instanz von CAggComObject<CYourClass> für zusammengesetzte Objekte oder eine Instanz von CComObject<CYourClass> für nicht aggregierte Objekte.

Der Vorteil der Verwendung von CComPolyObject ist, dass Sie vermeiden, CComAggObject und CComObject im Modul verfügen, um die aggregierten und nicht aggregierten Fälle zu behandeln. Einzelne CComPolyObject-Objekthandles beide Fälle. Daher bestehen nur eine Kopie des vtable und eine Kopie der Funktionen im Modul. Wenn das vtable groß ist, kann dies die Modulgröße erheblich beeinträchtigt. Wenn das vtable ist, mit CComPolyObject eine einige größere Modulgröße führen klein, da sie nicht für ein aggregiertes oder nicht aggregiertes Objekt optimiert wird, wie können CComAggObject und CComObject.

Wenn das Objekt aggregiert wird, wird IUnknown durch CComAggObject oder CComPolyObject implementiert. Diese Klassen delegieren QueryInterface, AddRef und Release-Aufrufe an OuterQueryInterface, OuterAddRef und OuterRelease von CComObjectRootEx, um an den äußeren Unbekannten weiterzuleiten. In der Regel überschreiben Sie CComObjectRootEx::FinalConstruct in der Klasse, um alle zusammengesetzten Objekte zu erstellen und CComObjectRootEx::FinalRelease überschreiben, um zusammengesetzte Objekte freizugeben.

Wenn das Objekt nicht aggregiert wird, wird IUnknown durch CComObject oder CComPolyObject implementiert. In diesem Fall werden Aufrufe von QueryInterface, AddRef und Release an InternalQueryInterface, InternalAddRef und InternalRelease von CComObjectRootEx delegiert, um die tatsächlichen Vorgänge auszuführen.

Anforderungen

Header: möchten

Siehe auch

Referenz

CComAggObject Class

CComObject Class

CComPolyObject Class

Weitere Ressourcen

ATL Class Overview