Condividi tramite


Classe CComObject

Questa classe implementa IUnknown per un oggetto nonaggregato.

Sintassi

template<class Base>
class CComObject : public Base

Parametri

Base
La classe, derivata da CComObjectRoot o CComObjectRootEx, nonché da qualsiasi altra interfaccia che si vuole supportare sull'oggetto.

Membri

Costruttori pubblici

Nome Descrizione
CComObject::CComObject Costruttore.
CComObject::~CComObject Distruttore.

Metodi pubblici

Nome Descrizione
CComObject::AddRef Incrementa il conteggio dei riferimenti sull'oggetto .
CComObject::CreateInstance (Statico) Crea un nuovo CComObject oggetto.
CComObject::QueryInterface Recupera un puntatore all'interfaccia richiesta.
CComObject::Release Decrementa il conteggio dei riferimenti sull'oggetto .

Osservazioni:

CComObject implementa IUnknown per un oggetto nonaggregato. Tuttavia, le chiamate a QueryInterface, AddRefe Release vengono delegate a CComObjectRootEx.

Per altre informazioni sull'uso CComObjectdi , vedere l'articolo Nozioni fondamentali sugli oggetti COM ATL.

Gerarchia di ereditarietà

Base

CComObject

Requisiti

Intestazione: atlcom.h

CComObject::AddRef

Incrementa il conteggio dei riferimenti sull'oggetto .

STDMETHOD_(ULONG, AddRef)();

Valore restituito

Questa funzione restituisce il nuovo conteggio dei riferimenti incrementati sull'oggetto . Questo valore può essere utile per la diagnostica o il test.

CComObject::CComObject

Il costruttore incrementa il numero di blocchi del modulo.

CComObject(void* = NULL);

Parametri

vuoto*
[in] Questo parametro senza nome non viene usato. Esiste per la simmetria con altri CComXXXObjectXXX costruttori.

Osservazioni:

Il distruttore lo decrementa.

Se un CComObjectoggetto derivato da viene costruito correttamente usando l'operatore new , il conteggio dei riferimenti iniziale è 0. Per impostare il conteggio dei riferimenti sul valore appropriato (1), effettuare una chiamata alla funzione AddRef .

CComObject::~CComObject

Distruttore.

CComObject();

Osservazioni:

Libera tutte le risorse allocate, chiama FinalRelease e decrementa il conteggio dei blocchi del modulo.

CComObject::CreateInstance

Questa funzione statica consente di creare un nuovo oggetto CComObjectBase><, senza sovraccarico di CoCreateInstance.

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

Parametri

Pp
[out] Puntatore a un puntatore CComObject><Base. Se CreateInstance ha esito negativo, pp è impostato su NULL.

Valore restituito

Valore HRESULT standard.

Osservazioni:

L'oggetto restituito ha un conteggio dei riferimenti pari a zero, quindi chiamare AddRef immediatamente, quindi usare Release per liberare il riferimento sul puntatore all'oggetto al termine.

Se non è necessario l'accesso diretto all'oggetto, ma si vuole comunque creare un nuovo oggetto senza sovraccarico di CoCreateInstance, usare invece CComCoClass::CreateInstance .

Esempio

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

Recupera un puntatore all'interfaccia richiesta.

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

Parametri

iid
[in] Identificatore dell'interfaccia richiesta.

ppvObject
[out] Puntatore al puntatore dell'interfaccia identificato da iid. Se l'oggetto non supporta questa interfaccia, ppvObject è impostato su NULL.

Pp
[out] Puntatore al puntatore dell'interfaccia identificato dal tipo Q. Se l'oggetto non supporta questa interfaccia, pp è impostato su NULL.

Valore restituito

Valore HRESULT standard.

CComObject::Release

Decrementa il conteggio dei riferimenti sull'oggetto .

STDMETHOD_(ULONG, Release)();

Valore restituito

Questa funzione restituisce il nuovo conteggio dei riferimenti decrementati sull'oggetto . Nelle compilazioni di debug il valore restituito può essere utile per la diagnostica o il test. Nelle compilazioni non di debug restituisce Release sempre 0.

Vedi anche

Classe CComAggObject
Classe CComPolyObject
DECLARE_AGGREGATABLE
DECLARE_NOT_AGGREGATABLE
Cenni preliminari sulla classe