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
CComPolyObject
implé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 IUnknown
l’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
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 CoCreateInstance
place.
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