CComObjectRootEx-Klasse
Diese Klasse stellt Methoden zum Handleobjektverweis-Anzahlverwaltung für nicht aggregiertes und zusammengesetzte Objekte bereit.
template<
class ThreadModel
>
class CComObjectRootEx : public CComObjectRootBase
Parameter
- ThreadModel
Die Klasse, deren Methoden das gewünschte Threadingmodell implementieren.Sie können das Threadingmodell explizit auswählen, indem Sie ThreadModel zu CComSingleThreadModel, zu CComMultiThreadModel oder zu CComMultiThreadModelNoCS festlegen.Sie können das standardmäßige Threadmodell des Servers akzeptieren, indem Sie ThreadModel zu CComObjectThreadModel oder zu CComGlobalsThreadModel festlegen.
Mitglieder
Methoden
Konstruktor. |
|
Inkrementiert den Verweiszähler für ein nicht aggregiertes Objekt. |
|
Dekrementiert den Verweiszähler für ein nicht aggregiertes Objekt. |
|
Wenn das Threadmodell eine Multithreadkomponente ist, erhält den Besitz einer kritischen Abschnittsobjekts. |
|
Wenn das Threadmodell eine Multithreadkomponente ist, gibt den Besitz einer kritischen Abschnittsobjekts frei. |
CComObjectRootBase-Methoden
Überschreibung in der Klasse, um jede Initialisierung auszuführen erfordert durch das Objekt. |
|
Überschreibung in der Klasse, um alle auszuführen bereinigen erforderliches durch das Objekt. |
|
Inkrementiert den Verweiszähler für ein zusammengesetztes Objekt. |
|
Delegaten zu äußeren IUnknown eines zusammengesetzten Objekts. |
|
Dekrementiert den Verweiszähler für ein zusammengesetztes Objekt. |
Statische Funktionen
Delegaten zu IUnknown eines nicht aggregierten Objekts. |
|
Aufgerufen während der Modulinitialisierung und - beendung für die abgeleiteten Klassen aufgeführt in der Objektzuordnung. |
Datenmember
Mit m_pOuterUnknown Teil einer Union.Wird verwendet, wenn das Objekt nicht aggregiert wird, um den Verweiszähler von AddRef und von Release aufzunehmen. |
|
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