Partager via


CComObject, classe

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

Syntaxe

template<class Base>
class CComObject : public Base

Paramètres

Base
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
CComObject ::CComObject Constructeur .
CComObject ::~CComObject Destructeur.

Méthodes publiques

Nom Description
CComObject ::AddRef Incrémente le nombre de références sur l’objet.
CComObject ::CreateInstance (Statique) Crée un CComObject objet.
CComObject ::QueryInterface Récupère un pointeur vers l'interface demandée.
CComObject ::Release Décrémente le nombre de références sur l’objet.

Notes

CComObjectimplémente IUnknown pour un objet non agrégé. Toutefois, les appels à QueryInterface, AddRefet Release sont délégués à CComObjectRootEx.

Pour plus d’informations sur l’utilisation CComObject, consultez l’article Principes de base des objets COM ATL.

Hiérarchie d'héritage

Base

CComObject

Spécifications

En-tête : atlcom.h

CComObject ::AddRef

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

STDMETHOD_(ULONG, AddRef)();

Valeur de retour

Cette fonction retourne le nouveau nombre de références incrémentées sur l’objet. Cette valeur peut être utile pour les diagnostics ou les tests.

CComObject ::CComObject

Le constructeur incrémente le nombre de verrous du module.

CComObject(void* = NULL);

Paramètres

Vide*
[in] Ce paramètre non nommé n’est pas utilisé. Il existe pour la symétrie avec d’autres CComXXXObjectXXX constructeurs.

Notes

Le destructeur le décrémente.

Si un CComObjectobjet dérivé est correctement construit à l’aide de l’opérateur new , le nombre de références initial est égal à 0. Pour définir le nombre de références sur la valeur appropriée (1), effectuez un appel à la fonction AddRef .

CComObject ::~CComObject

Destructeur.

CComObject();

Notes

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

CComObject ::CreateInstance

Cette fonction statique vous permet de créer un objet CComObject<>Base, sans surcharge de CoCreateInstance.

static HRESULT WINAPI CreateInstance(CComObject<Base>** pp);

Paramètres

Pp
[out] Pointeur vers un pointeur CComObject><Base. 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 CoCreateInstance, utilisez CComCoClass ::CreateInstance à la place.

Exemple

class ATL_NO_VTABLE CMyCircle :
   public CComObjectRootEx<CComSingleThreadModel>,
   public CComCoClass<CMyCircle, &CLSID_MyCircle>,
   public IDispatchImpl<IMyCircle, &IID_IMyCircle, &LIBID_NVC_ATL_COMLib, /*wMajor =*/ 1, /*wMinor =*/ 0>
{
public:
   CMyCircle()
   {
   }

DECLARE_REGISTRY_RESOURCEID(IDR_MYCIRCLE)

DECLARE_NOT_AGGREGATABLE(CMyCircle)

BEGIN_COM_MAP(CMyCircle)
   COM_INTERFACE_ENTRY(IMyCircle)
   COM_INTERFACE_ENTRY(IDispatch)
END_COM_MAP()



   DECLARE_PROTECT_FINAL_CONSTRUCT()

   HRESULT FinalConstruct()
   {
      return S_OK;
   }

   void FinalRelease()
   {
   }

public:

public:
   STDMETHOD(get_XCenter)(double* pVal);
};

 

// Create a local instance of COM object CMyCircle.
double x;
CComObject<CMyCircle>* pCircle;
HRESULT hRes = CComObject<CMyCircle>::CreateInstance(&pCircle);
ATLASSERT(SUCCEEDED(hRes));

// Increment reference count immediately
pCircle->AddRef();

// Access method of COM object
hRes = pCircle->get_XCenter(&x);

// Decrement reference count when done
pCircle->Release();
pCircle = NULL;

CComObject ::QueryInterface

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

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

Paramètres

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 le pointeur d’interface identifié par type Q. Si l’objet ne prend pas en charge cette interface, pp a la valeur NULL.

Valeur de retour

Valeur HRESULT standard.

CComObject ::Release

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

STDMETHOD_(ULONG, Release)();

Valeur de retour

Cette fonction retourne le nouveau nombre de références décrémentées sur l’objet. Dans les builds de débogage, la valeur de retour peut être utile pour les diagnostics ou les tests. Dans les builds non debug, Release retourne toujours 0.

Voir aussi

CComAggObject, classe
CComPolyObject, classe
DECLARE_AGGREGATABLE
DECLARE_NOT_AGGREGATABLE
Vue d’ensemble de la classe