CComPolyObject-Klasse
Diese Klasse implementiert IUnknown
ein aggregiertes oder nicht aggregiertes Objekt.
Syntax
template<class contained>
class CComPolyObject : public IUnknown,
public CComObjectRootEx<contained::_ThreadModel::ThreadModelNoCS>
Parameter
enthalten
Ihre Von CComObjectRoot oder CComObjectRootEx abgeleitete Klasse sowie alle anderen Schnittstellen, die Sie für das Objekt unterstützen möchten.
Member
Öffentliche Konstruktoren
Name | Beschreibung |
---|---|
CComPolyObject::CComPolyObject | Der Konstruktor. |
CComPolyObject::~CComPolyObject | Der Destruktor. |
Öffentliche Methoden
Name | Beschreibung |
---|---|
CComPolyObject::AddRef | Erhöht die Referenzanzahl des Objekts. |
CComPolyObject::CreateInstance | (Statisch) Ermöglicht ihnen das Erstellen eines neuen CComPolyObject-Objekts contained ><ohne den Aufwand von CoCreateInstance. |
CComPolyObject::FinalConstruct | Führt die endgültige Initialisierung von m_contained . |
CComPolyObject::FinalRelease | Führt die endgültige Zerstörung von m_contained . |
CComPolyObject::QueryInterface | Ruft einen Zeiger auf die angeforderte Schnittstelle ab. |
CComPolyObject::Release | Erhöht die Referenzanzahl des Objekts. |
Öffentliche Datenmember
Name | Beschreibung |
---|---|
CComPolyObject::m_contained | Delegiert Aufrufe IUnknown an das äußere Unbekannte, wenn das Objekt aggregiert oder an das IUnknown Objekt aggregatiert wird, wenn das Objekt nicht aggregiert wird. |
Hinweise
CComPolyObject
implementiert IUnknown für ein aggregiertes oder nicht aggregiertes Objekt.
Wenn eine Instanz erstellt CComPolyObject
wird, wird der Wert des äußeren Unbekannten überprüft. Wenn es NULL ist, IUnknown
wird für ein nicht aggregiertes Objekt implementiert. Wenn das äußere Unbekannte nicht NULL ist, IUnknown
wird für ein aggregiertes Objekt implementiert.
Der Vorteil der Verwendung CComPolyObject
besteht darin, dass Sie sowohl CComAggObject als auch CComObject in Ihrem Modul vermeiden, um die aggregierten und nicht aggregierten Fälle zu verarbeiten. Ein einzelnes CComPolyObject
Objekt behandelt beide Fälle. Dies bedeutet, dass nur eine Kopie der vtable und eine Kopie der Funktionen in Ihrem Modul vorhanden ist. Wenn die vtable groß ist, kann dies die Modulgröße erheblich verringern. Wenn die vtable jedoch klein ist, kann die Verwendung CComPolyObject
zu einer etwas größeren Modulgröße führen, da sie nicht für ein aggregiertes oder nicht aggregiertes Objekt optimiert ist, wie es sind CComAggObject
und CComObject
.
Wenn das DECLARE_POLY_AGGREGATABLE Makro in der Klassendefinition des Objekts angegeben ist, CComPolyObject
wird das Objekt erstellt. DECLARE_POLY_AGGREGATABLE wird automatisch deklariert, wenn Sie den ATL-Projekt-Assistenten verwenden, um ein Vollzugriffs- oder Internet Explorer-Steuerelement zu erstellen.
Bei aggregierter Aggregatfunktion verfügt das CComPolyObject
Objekt über einen eigenen IUnknown
, getrennt vom äußeren Objekt IUnknown
und verwaltet seine eigene Bezugsanzahl. CComPolyObject
verwendet CComContainedObject , um an das äußere Unbekannte zu delegieren.
Weitere Informationen zur Aggregation finden Sie im Artikel Grundlagen von ATL COM-Objekten.
Vererbungshierarchie
CComObjectRootBase
IUnknown
CComPolyObject
Anforderungen
Kopfzeile: atlcom.h
CComPolyObject::AddRef
Erhöht die Verweisanzahl für das Objekt.
STDMETHOD_(ULONG, AddRef)();
Rückgabewert
Ein Wert, der für Diagnosen oder Tests nützlich sein kann.
CComPolyObject::CComPolyObject
Der Konstruktor.
CComPolyObject(void* pv);
Parameter
Pv
[in] Ein Zeiger auf das äußere Unbekannte, wenn das Objekt aggregiert werden soll, oder NULL, wenn das Objekt nicht aggregiert wird.
Hinweise
Initialisiert das CComContainedObject
Datenelement, m_contained und erhöht die Modulsperranzahl.
Der Destruktor erhöht die Anzahl der Modulsperren.
CComPolyObject::~CComPolyObject
Der Destruktor.
~CComPolyObject();
Hinweise
Gibt alle zugeordneten Ressourcen frei, ruft FinalRelease auf und erhöht die Modulsperranzahl.
CComPolyObject::CreateInstance
Ermöglicht ihnen das Erstellen eines neuen CComPolyObject-Objektscontained
>< ohne den Aufwand von CoCreateInstance.
static HRESULT WINAPI CreateInstance(
LPUNKNOWN pUnkOuter,
CComPolyObject<contained>** pp);
Parameter
PP
[out] Ein Zeiger auf einen CComPolyObject-Zeiger><contained
. Wenn CreateInstance
dies nicht erfolgreich ist, wird pp auf NULL festgelegt.
Rückgabewert
Ein HRESULT-Standardwert.
Hinweise
Das zurückgegebene Objekt weist eine Bezugsanzahl von Null auf. Rufen Sie also sofort auf AddRef
, um Release
den Verweis auf den Objektzeiger freizugeben, wenn Sie fertig sind.
Wenn Sie keinen direkten Zugriff auf das Objekt benötigen, aber dennoch ein neues Objekt erstellen möchten, ohne den Aufwand CoCreateInstance
zu haben, verwenden Sie stattdessen CComCoClass::CreateInstance .
CComPolyObject::FinalConstruct
Diese Methode wird während der letzten Phasen der Objekterstellung aufgerufen und führt alle endgültigen Initialisierungen für das m_contained-Datenmemm aus.
HRESULT FinalConstruct();
Rückgabewert
Ein HRESULT-Standardwert.
CComPolyObject::FinalRelease
Diese Methode wird während der Objektvernichtung aufgerufen und gibt das m_contained Datenelement frei.
void FinalRelease();
CComPolyObject::m_contained
Ein von Ihrer Klasse abgeleitetes CComContainedObject-Objekt .
CComContainedObject<contained> m_contained;
Parameter
enthalten
[in] Ihre Von CComObjectRoot oder CComObjectRootEx abgeleitete Klasse sowie alle anderen Schnittstellen, die Sie für das Objekt unterstützen möchten.
Hinweise
IUnknown
m_contained
Aufrufe werden an das äußere Unbekannte delegiert, wenn das Objekt aggregiert wird, oder an das IUnknown
Objekt, wenn das Objekt nicht aggregiert wird.
CComPolyObject::QueryInterface
Ruft einen Zeiger auf die angeforderte Schnittstelle ab.
STDMETHOD(QueryInterface)(REFIID iid, void** ppvObject);
template <class Q>
HRESULT QueryInterface(Q** pp);
Parameter
Q
Die COM-Schnittstelle.
iid
[in] Der Bezeichner der angeforderten Schnittstelle.
ppvObject
[out] Ein Zeiger auf den Schnittstellenzeiger, der durch iid identifiziert wird. Wenn das Objekt diese Schnittstelle nicht unterstützt, wird ppvObject auf NULL festgelegt.
PP
[out] Ein Zeiger auf die schnittstelle, die durch __uuidof(Q)
.
Rückgabewert
Ein HRESULT-Standardwert.
Hinweise
Gibt für ein aggregiertes Objekt, wenn die angeforderte Schnittstelle lautet IUnknown
, QueryInterface
einen Zeiger auf das eigene IUnknown
aggregierte Objekt zurück und erhöht die Referenzanzahl. Andernfalls fragt diese Methode die Schnittstelle über das CComContainedObject
Datenelement m_contained ab.
CComPolyObject::Release
Erhöht die Verweisanzahl für das Objekt.
STDMETHOD_(ULONG, Release)();
Rückgabewert
Gibt in Debugbuilds einen Wert zurück, Release
der für Diagnosen oder Tests nützlich sein kann. Gibt in Nichtfehlerbuilds Release
immer "0" zurück.
Siehe auch
CComObjectRootEx-Klasse
DECLARE_POLY_AGGREGATABLE
Klassenübersicht