Partager via


CComPolyObject, classe

Cette classe implémente IUnknown pour un objet de synthèse ou non regroupé en agrégats.

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

Paramètres

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

Membres

Constructeurs publics

Nom

Description

CComPolyObject::CComPolyObject

Constructeur.

CComPolyObject::~CComPolyObject

Le destructeur.

Méthodes publiques

Nom

Description

CComPolyObject::AddRef

Incrémente le décompte de références de l'objet.

CComPolyObject::CreateInstance

(Statique) vous permet de créer un objet de CComPolyObject< contained> sans la charge de CoCreateInstance.

CComPolyObject::FinalConstruct

Exécute l'initialisation finale d' m_contained.

CComPolyObject::FinalRelease

Exécute la destruction finale d' m_contained.

CComPolyObject::QueryInterface

Extrait un pointeur vers l'interface demandée.

CComPolyObject::Release

Décrémente le décompte de références de l'objet.

Données membres publiques

Nom

Description

CComPolyObject::m_contained

Appels d' IUnknown de délégués à l'inconnu externe si l'objet est regroupé ou à IUnknown de l'objet si l'objet n'est pas regroupé.

Notes

CComPolyObject implémente IUnknown pour un objet de synthèse ou non regroupé en agrégats.

Lorsqu'une instance d' CComPolyObject est créée, la valeur de l'inconnu externe est activée. Si c'est NULL, IUnknown est implémenté pour un objet non regroupé en agrégats. Si l'inconnu externe n'est pas NULL, IUnknown est implémenté pour un objet regroupé en agrégats.

l'avantage d'utiliser CComPolyObject est que vous évitez d'avoir CComAggObject et CComObject dans votre module pour traiter les cas de synthèse et non regroupés en agrégats. Handles d'objet unique d' CComPolyObject les deux cas. Cela signifie qu'une copie du pointeur vtable et une copie des fonctions existent dans votre package. Si votre pointeur vtable est important, cela peut considérablement réduire la taille du module. Toutefois, si votre pointeur vtable est petite, à l'aide de CComPolyObject peuvent entraîner une taille légèrement plus grande de module car elle n'est pas optimisée pour un objet de synthèse ou non regroupé en agrégats, de même qu' CComAggObject et CComObject.

Si la macro d' DECLARE_POLY_AGGREGATABLE spécifiée dans la définition de classe de votre objet, CComPolyObject sera utilisé 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 d'Internet Explorer.

Si regroupé, l'objet d' CComPolyObject a son propre IUnknown, distinct d' IUnknownexterne de l'objet, et met à jour son propre décompte de références. CComPolyObject utilise CComContainedObject pour le déléguer à l'inconnu externe.

Pour plus d'informations sur le regroupement, consultez l'article Notions de base des objets COM ATL.

Hiérarchie d'héritage

CComObjectRootBase

CComObjectRootEx

IUnknown

CComPolyObject

Configuration requise

Header: atlcom.h

Voir aussi

Référence

CComObjectRootEx, classe

DECLARE_POLY_AGGREGATABLE

Autres ressources

Vue d'ensemble de la classe ATL