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 geaggregeerd of niet-geaggregeerd object.
Syntaxis
template<class contained>
class CComPolyObject : public IUnknown,
public CComObjectRootEx<contained::_ThreadModel::ThreadModelNoCS>
Parameterwaarden
ingesloten
Uw klasse, afgeleid van CComObjectRoot of CComObjectRootEx, evenals van andere interfaces die u voor het object wilt ondersteunen.
Leden
Openbare constructors
| Naam | Description |
|---|---|
| CComPolyObject::CComPolyObject | De constructor. |
| CComPolyObject::~CComPolyObject | De destructor. |
Openbare methoden
| Naam | Description |
|---|---|
| CComPolyObject::AddRef | Hiermee wordt het aantal verwijzingen van het object verhoogd. |
| CComPolyObject::CreateInstance | (Statisch) Hiermee kunt u een nieuw CComPolyObject-object<contained> maken zonder de overhead van CoCreateInstance. |
| CComPolyObject::FinalConstruct | Voert de laatste initialisatie van m_contained. |
| CComPolyObject::FinalRelease | Voert definitieve vernietiging van m_contained. |
| CComPolyObject::QueryInterface | Hiermee wordt een aanwijzer naar de aangevraagde interface opgehaald. |
| CComPolyObject::Release | Hiermee wordt het verwijzingsaantal van het object afgeschroefd. |
Publieke dataleden
| Naam | Description |
|---|---|
| CComPolyObject::m_contained | Delegeert IUnknown aanroepen naar het buitenste onbekende als het object wordt samengevoegd of aan het IUnknown object als het object niet is samengevoegd. |
Opmerkingen
CComPolyObject implementeert IUnknown voor een geaggregeerd of niet-geaggregeerd object.
Wanneer er een exemplaar van CComPolyObject wordt gemaakt, wordt de waarde van het buitenste onbekende gecontroleerd. Als het NULL is, IUnknown wordt deze geïmplementeerd voor een niet-samengevoegd object. Als de buitenste onbekende waarde niet NULL is, IUnknown wordt deze geïmplementeerd voor een geaggregeerd object.
Het voordeel van het gebruik CComPolyObject is dat u zowel CComAggObject als CComComObject in uw module vermijdt om de samengevoegde en niet-samengevoegde gevallen te verwerken. Een enkel CComPolyObject object verwerkt beide gevallen. Dit betekent dat er slechts één kopie van de vtable en één kopie van de functies in uw module aanwezig zijn. Als uw vtable groot is, kan dit de modulegrootte aanzienlijk verkleinen. Als uw vtable echter klein is, kan het gebruik CComPolyObject resulteren in een iets grotere module omdat deze niet is geoptimaliseerd voor een geaggregeerd of niet-samengevoegd object, zoals dat CComAggObject wel en CComObject.
Als de DECLARE_POLY_AGGREGATABLE macro is opgegeven in de klassedefinitie van uw object, CComPolyObject wordt deze gebruikt om uw object te maken. DECLARE_POLY_AGGREGATABLE wordt automatisch gedeclareerd als u de wizard ATL-project gebruikt om een volledig besturingselement of Internet Explorer-besturingselement te maken.
Als het object wordt samengevoegd, heeft het CComPolyObject een eigen IUnknownobject, gescheiden van het buitenste object IUnknownen onderhoudt het eigen referentieaantal.
CComPolyObject gebruikt CComContainedObject om te delegeren aan het buitenste onbekende object.
Zie het artikel Basisprincipes van ATL COM-objecten voor meer informatie over aggregatie.
Overnamehiërarchie
CComObjectRootBase
IUnknown
CComPolyObject
Requirements
Koptekst: atlcom.h
CComPolyObject::AddRef
Hiermee wordt het aantal verwijzingen voor het object verhoogd.
STDMETHOD_(ULONG, AddRef)();
Retourwaarde
Een waarde die nuttig kan zijn voor diagnostische gegevens of tests.
CComPolyObject::CComPolyObject
De constructor.
CComPolyObject(void* pv);
Parameterwaarden
Pv
[in] Een aanwijzer naar de buitenste onbekende als het object moet worden samengevoegd, of NULL als het object niet is samengevoegd.
Opmerkingen
Initialiseert het CComContainedObject gegevenslid, m_contained en incrementeert het aantal modulevergrendelingen.
Destructor degradeert het aantal modulevergrendelingen.
CComPolyObject::~CComPolyObject
De destructor.
~CComPolyObject();
Opmerkingen
Hiermee worden alle toegewezen resources vrijgemaakt, FinalRelease aanroepen en wordt het aantal modulevergrendelingen afgetrokken.
CComPolyObject::CreateInstance
Hiermee kunt u een nieuw CComPolyObject-object<contained> maken zonder de overhead van CoCreateInstance.
static HRESULT WINAPI CreateInstance(
LPUNKNOWN pUnkOuter,
CComPolyObject<contained>** pp);
Parameterwaarden
Pp
[uit] Een aanwijzer naar een CComPolyObject-aanwijzer<contained> . 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 de overhead van, gebruikt u in plaats daarvan CoCreateInstanceCComCoClass::CreateInstance.
CComPolyObject::FinalConstruct
Deze methode wordt aangeroepen tijdens de laatste fasen van de objectconstructie en voert een definitieve initialisatie uit op het m_contained gegevenslid.
HRESULT FinalConstruct();
Retourwaarde
Een standaard HRESULT-waarde.
CComPolyObject::FinalRelease
Met deze methode die wordt aangeroepen tijdens de vernietiging van objecten, wordt het m_contained gegevenslid vrijgemaakt.
void FinalRelease();
CComPolyObject::m_contained
Een CComContainedObject-object dat is afgeleid van uw klasse.
CComContainedObject<contained> m_contained;
Parameterwaarden
ingesloten
[in] Uw klasse, afgeleid van CComObjectRoot of CComObjectRootEx, evenals van andere interfaces die u voor het object wilt ondersteunen.
Opmerkingen
IUnknown
m_contained aanroepen worden gedelegeerd aan het buitenste onbekende als het object wordt samengevoegd of aan het IUnknown object als het object niet wordt samengevoegd.
CComPolyObject::QueryInterface
Hiermee wordt een aanwijzer naar de aangevraagde interface opgehaald.
STDMETHOD(QueryInterface)(REFIID iid, void** ppvObject);
template <class Q>
HRESULT QueryInterface(Q** pp);
Parameterwaarden
Q
De COM-interface.
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 interface geïdentificeerd door __uuidof(Q).
Retourwaarde
Een standaard HRESULT-waarde.
Opmerkingen
Als de aangevraagde interface voor een samengevoegd object is IUnknown, QueryInterface retourneert u een aanwijzer naar de eigen IUnknown waarde van het samengevoegde object en wordt het aantal verwijzingen verhoogd. Anders voert deze methode query's uit voor de interface via het CComContainedObject gegevenslid , m_contained.
CComPolyObject::Release
Hiermee wordt het aantal verwijzingen voor het object afgeschroefd.
STDMETHOD_(ULONG, Release)();
Retourwaarde
In builds Release voor foutopsporing wordt een waarde geretourneerd die nuttig kan zijn voor diagnostische gegevens of tests. In niet-foutopsporingsversies Release wordt altijd 0 geretourneerd.
Zie ook
CComObjectRootEx-klasse
DECLARE_POLY_AGGREGATABLE
Overzicht van klassen