Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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
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