Freigeben über


CComPolyObject Class

Diese Klasse implementiert IUnknown für ein aggregiertes oder nicht aggregiertes Objekt.

template< 
   class contained  
> 
class CComPolyObject : public IUnknown, public CComObjectRootEx 
   < contained::_ThreadModel::ThreadModelNoCS >

Parameter

  • contained
    Die Klasse, die von abgeleitet CComObjectRoot oder von CComObjectRootEx sowie beliebiger anderer Schnittstellen möchten Sie auf das Objekt unterstützen.

Mitglieder

Öffentliche Konstruktoren

Name

Description

CComPolyObject::CComPolyObject

Der -Konstruktor.

CComPolyObject::~CComPolyObject

Der Destruktor.

Öffentliche Methoden

Name

Description

CComPolyObject::AddRef

Inkrementiert den Verweiszählerwert des Objekts.

CComPolyObject::CreateInstance

(Statisch) ermöglicht Ihnen, um ein neues Objekt CComPolyObject< contained> ohne den Mehraufwand von CoCreateInstance zu erstellen.

CComPolyObject::FinalConstruct

Führt abschließende Initialisierungsschritte von m_contained aus.

CComPolyObject::FinalRelease

Führt endgültige Zerstörung von m_contained aus.

CComPolyObject::QueryInterface

Ruft einen Zeiger auf die angeforderte Schnittstelle ab.

CComPolyObject::Release

Dekrementiert den Verweiszählerwert des Objekts.

Öffentliche Datenmember

Name

Description

CComPolyObject::m_contained

Delegaten-IUnknown-Aufrufe des äußeren Unbekannten, wenn das Objekt aggregiert wird oder zu IUnknown des Objekts, wenn das Objekt nicht aggregiert wird.

Hinweise

CComPolyObject implementiert IUnknown für ein aggregiertes oder nicht aggregiertes Objekt.

Wenn eine Instanz von CComPolyObject erstellt wird, 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.

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. Dies bedeutet, dass nur eine Kopie des vtable und eine Kopie der Funktionen im Modul vorhanden sind. 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 DECLARE_POLY_AGGREGATABLE-Makro in der Klassendefinition des Objekts angegeben wird, wird CComPolyObject verwendet, um das Objekt zu erstellen. DECLARE_POLY_AGGREGATABLE wird automatisch deklariert, wenn Sie den ATL-Projekt-Assistenten verwenden, um einen Kontrolle oder ein Internet Explorer-Steuerelement zu erstellen.

Wenn es aggregiert wird, verfügt das CComPolyObject-Objekt sein eigenes IUnknown, getrennt von IUnknown des äußeren Objekts und wird ein eigener Verweiszähler bei. CComPolyObject verwendet CComContainedObject, um dem äußeren Unbekannten zu delegieren.

Weitere Informationen zur Aggregation, finden Sie im Artikel Grundlagen von ATL-COM-Objekten.

Vererbungshierarchie

CComObjectRootBase

CComObjectRootEx

IUnknown

CComPolyObject

Anforderungen

Header: möchten

Siehe auch

Referenz

CComObjectRootEx Class

DECLARE_POLY_AGGREGATABLE

Weitere Ressourcen

ATL Class Overview