Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of mappen te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen om mappen te wijzigen.
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