Partager via


CComPolyObject, classe

Cette classe implémente IUnknown pour un objet agrégé ou non agrégé.

Syntaxe

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

Paramètres

Contenues
Votre classe, dérivée de CComObjectRoot ou CComObjectRootEx, ainsi que de toutes les autres interfaces que vous souhaitez prendre en charge sur l’objet.

Membres

Constructeurs publics

Nom Description
CComPolyObject ::CComPolyObject Constructeur .
CComPolyObject ::~CComPolyObject Destructeur.

Méthodes publiques

Nom Description
CComPolyObject ::AddRef Incrémente le nombre de références de l’objet.
CComPolyObject ::CreateInstance (Statique) Vous permet de créer un objet CComPolyObject< > contained sans surcharge de CoCreateInstance.
CComPolyObject ::FinalConstruct Effectue l’initialisation finale de m_contained.
CComPolyObject ::FinalRelease Effectue la destruction finale de m_contained.
CComPolyObject ::QueryInterface Récupère un pointeur vers l'interface demandée.
CComPolyObject ::Release Décrémente le nombre de références de l’objet.

Membres de données publics

Nom Description
CComPolyObject ::m_contained Délègue les IUnknown appels à l’extérieur inconnu si l’objet est agrégé ou à l’objet IUnknown si l’objet n’est pas agrégé.

Notes

CComPolyObjectimplémente IUnknown pour un objet agrégé ou non agrégé.

Lorsqu’une instance est CComPolyObject créée, la valeur de l’inconnu externe est cochée. S’il s’agit de NULL, IUnknown est implémenté pour un objet non agrégé. Si l’inconnu externe n’est pas NULL, IUnknown est implémenté pour un objet agrégé.

L’avantage de l’utilisation CComPolyObject est que vous évitez d’avoir CComAggObject et CComObject dans votre module pour gérer les cas agrégés et non agrégés. Un objet unique CComPolyObject gère les deux cas. Cela signifie qu’une seule copie de la table virtuelle et une copie des fonctions existent dans votre module. Si votre vtable est volumineux, cela peut réduire considérablement la taille de votre module. Toutefois, si votre vtable est petit, l’utilisation CComPolyObject peut entraîner une taille de module légèrement plus grande, car elle n’est pas optimisée pour un objet agrégé ou non agrégé, comme c’est le cas CComAggObject et CComObject.

Si la macro DECLARE_POLY_AGGREGATABLE est spécifiée dans la définition de classe de votre objet, CComPolyObject elle est utilisée pour créer votre objet. DECLARE_POLY_AGGREGATABLE sera automatiquement déclaré si vous utilisez l’Assistant Projet ATL pour créer un contrôle total ou un contrôle Internet Explorer.

S’il est agrégé, l’objet CComPolyObject a son propre IUnknown, séparé de celui de IUnknownl’objet externe et conserve son propre nombre de références. CComPolyObject utilise CComContainedObject pour déléguer à l’inconnu externe.

Pour plus d’informations sur l’agrégation, consultez l’article Principes de base des objets COM ATL.

Hiérarchie d'héritage

CComObjectRootBase

CComObjectRootEx

IUnknown

CComPolyObject

Spécifications

En-tête : atlcom.h

CComPolyObject ::AddRef

Incrémente le nombre de références sur l’objet.

STDMETHOD_(ULONG, AddRef)();

Valeur de retour

Valeur qui peut être utile pour les diagnostics ou les tests.

CComPolyObject ::CComPolyObject

Constructeur .

CComPolyObject(void* pv);

Paramètres

Pv
[in] Pointeur vers l’extérieur inconnu si l’objet doit être agrégé ou NULL si l’objet n’est pas agrégé.

Notes

Initialise le CComContainedObject membre de données, m_contained et incrémente le nombre de verrous du module.

Le destructeur décrémente le nombre de verrous du module.

CComPolyObject ::~CComPolyObject

Destructeur.

~CComPolyObject();

Notes

Libère toutes les ressources allouées, appelle FinalRelease et décrémente le nombre de verrous du module.

CComPolyObject ::CreateInstance

Vous permet de créer un objet CComPolyObject<>contained sans surcharge de CoCreateInstance.

static HRESULT WINAPI CreateInstance(
    LPUNKNOWN pUnkOuter,
    CComPolyObject<contained>** pp);

Paramètres

pp
[out] Pointeur vers un pointeur CComPolyObject><contained. En CreateInstance cas d’échec, pp a la valeur NULL.

Valeur de retour

Valeur HRESULT standard.

Notes

L’objet retourné a un nombre de références égal à zéro. Appelez AddRef donc immédiatement, puis utilisez Release pour libérer la référence sur le pointeur de l’objet lorsque vous avez terminé.

Si vous n’avez pas besoin d’un accès direct à l’objet, mais que vous souhaitez toujours créer un objet sans surcharge, utilisez CComCoClass ::CreateInstance à la CoCreateInstanceplace.

CComPolyObject ::FinalConstruct

Appelée au cours des dernières étapes de construction d’objet, cette méthode effectue toute initialisation finale sur le membre de données m_contained .

HRESULT FinalConstruct();

Valeur de retour

Valeur HRESULT standard.

CComPolyObject ::FinalRelease

Appelée lors de la destruction d’objets, cette méthode libère le membre de données m_contained .

void FinalRelease();

CComPolyObject ::m_contained

Objet CComContainedObject dérivé de votre classe.

CComContainedObject<contained> m_contained;

Paramètres

Contenues
[in] Votre classe, dérivée de CComObjectRoot ou CComObjectRootEx, ainsi que de toutes les autres interfaces que vous souhaitez prendre en charge sur l’objet.

Notes

IUnknown les appels par le biais m_contained sont délégués à l’extérieur inconnu si l’objet est agrégé ou à l’objet IUnknown si l’objet n’est pas agrégé.

CComPolyObject ::QueryInterface

Récupère un pointeur vers l'interface demandée.

STDMETHOD(QueryInterface)(REFIID iid, void** ppvObject);
template <class Q>
HRESULT QueryInterface(Q** pp);

Paramètres

Q
Interface COM.

iid
[in] Identificateur de l'interface demandée.

ppvObject
[out] Pointeur vers le pointeur d’interface identifié par iid. Si l’objet ne prend pas en charge cette interface, ppvObject a la valeur NULL.

pp
[out] Pointeur vers l’interface identifiée par __uuidof(Q).

Valeur de retour

Valeur HRESULT standard.

Notes

Pour un objet agrégé, si l’interface demandée est IUnknown, QueryInterface retourne un pointeur vers les propres IUnknown objets agrégés et incrémente le nombre de références. Sinon, cette méthode interroge l’interface via le CComContainedObject membre de données, m_contained.

CComPolyObject ::Release

Décrémente le nombre de références sur l’objet.

STDMETHOD_(ULONG, Release)();

Valeur de retour

Dans les builds de débogage, Release retourne une valeur qui peut être utile pour les diagnostics ou les tests. Dans les builds non-débogage, Release retourne toujours 0.

Voir aussi

CComObjectRootEx, classe
DECLARE_POLY_AGGREGATABLE
Vue d’ensemble de la classe