Share via


CComObject-klasse

Opmerking

De ATL (Active Template Library) wordt nog steeds ondersteund. We voegen echter geen functies meer toe of werken de documentatie bij.

Deze klasse implementeert IUnknown voor een niet-samengevoegd object.

Syntaxis

template<class Base>
class CComObject : public Base

Parameterwaarden

Base
Uw klasse, afgeleid van CComObjectRoot of CComObjectRootEx, evenals van andere interfaces die u voor het object wilt ondersteunen.

Leden

Openbare constructors

Naam Description
CComObject::CComObject De constructor.
CComObject::~CComObject De destructor.

Openbare methoden

Naam Description
CComObject::AddRef Hiermee wordt het aantal verwijzingen voor het object verhoogd.
CComObject::CreateInstance (Statisch) Hiermee maakt u een nieuw CComObject object.
CComObject::QueryInterface Hiermee wordt een aanwijzer naar de aangevraagde interface opgehaald.
CComObject::Release Hiermee wordt het aantal verwijzingen voor het object afgeschroefd.

Opmerkingen

CComObject implementeert IUnknown voor een niet-samengevoegd object. Oproepen naar QueryInterface, AddRefen Release worden echter gedelegeerd aan CComObjectRootEx.

Zie het artikel Grondbeginselen van ATL COM-objecten voor meer informatie over het gebruikCComObject.

Overnamehiërarchie

Base

CComObject

Requirements

Koptekst: atlcom.h

CComObject::AddRef

Hiermee wordt het aantal verwijzingen voor het object verhoogd.

STDMETHOD_(ULONG, AddRef)();

Retourwaarde

Met deze functie wordt het nieuwe aantal incrementele verwijzingen voor het object geretourneerd. Deze waarde kan nuttig zijn voor diagnostische gegevens of tests.

CComObject::CComObject

Met de constructor wordt het aantal modulevergrendelingen verhoogd.

CComObject(void* = NULL);

Parameterwaarden

Void*
[in] Deze niet-benoemde parameter wordt niet gebruikt. Deze bestaat voor symmetrie met andere CComXXXObjectXXX constructors.

Opmerkingen

De destructor degradeert het.

Als een CComObject-afgeleide object is samengesteld met behulp van de new operator, is het eerste aantal verwijzingen 0. Als u het aantal verwijzingen wilt instellen op de juiste waarde (1), roept u de functie AddRef aan.

CComObject::~CComObject

De destructor.

CComObject();

Opmerkingen

Hiermee worden alle toegewezen resources vrijgemaakt, FinalRelease aanroepen en wordt het aantal modulevergrendelingen afgetrokken.

CComObject::CreateInstance

Met deze statische functie kunt u een nieuw CComObject-object<Base> maken zonder de overhead van CoCreateInstance.

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

Parameterwaarden

Pp
[uit] Een aanwijzer naar een CComObject-aanwijzer<Base> . Als CreateInstance dit niet lukt, wordt pp ingesteld op NULL.

Retourwaarde

Een standaard HRESULT-waarde.

Opmerkingen

Het geretourneerde object heeft een verwijzingsaantal nul, dus roep AddRef onmiddellijk aan en gebruik vervolgens om de verwijzing op de objectpointer vrij te maken Release wanneer u klaar bent.

Als u geen directe toegang tot het object nodig hebt, maar toch een nieuw object wilt maken zonder overhead, gebruikt u in plaats daarvan CoCreateInstanceCComCoClass::CreateInstance.

Example

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

Hiermee wordt een aanwijzer naar de aangevraagde interface opgehaald.

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

Parameterwaarden

iid
[in] De id van de interface die wordt aangevraagd.

ppvObject
[uit] Een aanwijzer naar de interfacepointer die wordt geïdentificeerd door iid. Als het object deze interface niet ondersteunt, is ppvObject ingesteld op NULL.

Pp
[uit] Een aanwijzer naar de interfacepointer geïdentificeerd door het type Q. Als het object deze interface niet ondersteunt, is pp ingesteld op NULL.

Retourwaarde

Een standaard HRESULT-waarde.

CComObject::Release

Hiermee wordt het aantal verwijzingen voor het object afgeschroefd.

STDMETHOD_(ULONG, Release)();

Retourwaarde

Deze functie retourneert het nieuwe afgebroken verwijzingsaantal voor het object. In builds voor foutopsporing kan de retourwaarde nuttig zijn voor diagnostische gegevens of tests. In builds zonder foutopsporing retourneert Release altijd 0.

Zie ook

CComAggObject-klasse
Klasse CComPolyObject
DECLARE_AGGREGATABLE
DECLARE_NOT_AGGREGATABLE
Overzicht van klassen