Megosztás a következőn keresztül:


CComPolyObject osztály

Megjegyzés:

Az aktív sablontár (ATL) továbbra is támogatott. A továbbiakban azonban nem adunk hozzá funkciókat, és nem frissítjük a dokumentációt.

Ez az osztály egy összesített vagy nem összesített objektumhoz implementál IUnknown .

Szemantika

template<class contained>
class CComPolyObject : public IUnknown,
      public CComObjectRootEx<contained::_ThreadModel::ThreadModelNoCS>

Paraméterek

tartalmazott
Az osztály a CComObjectRoot vagy a CComObjectRootEx, valamint az objektumon támogatni kívánt egyéb felületekből származik.

Tagok

Nyilvános konstruktorok

Név Description
CComPolyObject::CComPolyObject A konstruktor.
CComPolyObject::~CComPolyObject A destruktor.

Nyilvános módszerek

Név Description
CComPolyObject::AddRef Növeli az objektum referenciaszámát.
CComPolyObject::CreateInstance (Statikus) Lehetővé teszi egy új CComPolyObject<contained> objektum létrehozását a CoCreateInstance többletterhelése nélkül.
CComPolyObject::FinalConstruct A végleges inicializálását hajtja m_containedvégre.
CComPolyObject::FinalRelease Végrehajtja a végleges megsemmisítést.m_contained
CComPolyObject::QueryInterface A kért felületre mutató mutatót kér le.
CComPolyObject::Release Az objektum hivatkozásainak száma csökken.

Nyilvános adatok tagjai

Név Description
CComPolyObject::m_contained A meghatalmazottak meghívják IUnknown a külső ismeretlent, ha az objektum összesítve van, vagy IUnknown ha az objektum nincs összesítve.

Megjegyzések

CComPolyObject A egy összesített vagy nem összesített objektumhoz implementálja az IUnknown objektumot.

Egy példány CComPolyObject létrehozásakor a rendszer ellenőrzi a külső ismeretlen értékét. Ha null értékű, IUnknown akkor egy nem összesített objektumhoz van implementálva. Ha a külső ismeretlen nem NULL értékű, IUnknown akkor egy összesített objektumhoz lesz implementálva.

A használat CComPolyObject előnye, hogy elkerülheti, hogy a CComAggObject és a CComObject is a modulban legyen az összesített és a nem összesített esetek kezeléséhez. Egyetlen CComPolyObject objektum mindkét esetet kezeli. Ez azt jelenti, hogy a virtuális tábla csak egy példánya és a függvények egy példánya létezik a modulban. Ha a virtuális tábla nagy, ez jelentősen csökkentheti a modul méretét. Ha azonban a virtuális tábla kicsi, a használat CComPolyObject valamivel nagyobb modulméretet eredményezhet, mivel nem összesített vagy nem összesített objektumhoz van optimalizálva, ahogyan az is és CComAggObjectCComObject.

Ha a DECLARE_POLY_AGGREGATABLE makró az objektum osztálydefiníciójában van megadva, CComPolyObject a rendszer az objektum létrehozásához fogja használni. DECLARE_POLY_AGGREGATABLE automatikusan deklarálva lesz, ha az ATL Projektvarázslóval hoz létre teljes vezérlőt vagy Internet Explorer-vezérlőt.

Ha összesítve van, az CComPolyObject objektum saját IUnknown, a külső objektumtól IUnknownfüggetlen, és megtartja a saját hivatkozási számát. CComPolyObject A CComContainedObject használatával delegálható a külső ismeretlenbe.

Az összesítéssel kapcsolatos további információkért tekintse meg az ATL COM-objektumok alapjai című cikket.

Öröklési hierarchia

CComObjectRootBase

CComObjectRootEx

IUnknown

CComPolyObject

Requirements

Fejléc: atlcom.h

CComPolyObject::AddRef

Növeli az objektum referenciaszámát.

STDMETHOD_(ULONG, AddRef)();

Visszaadott érték

A diagnosztikához vagy teszteléshez hasznos érték.

CComPolyObject::CComPolyObject

A konstruktor.

CComPolyObject(void* pv);

Paraméterek

Pv
[in] A külső ismeretlenre mutató mutató, ha az objektumot összesíteni kell, vagy NULL értékű, ha az objektum nincs összesítve.

Megjegyzések

Inicializálja az CComContainedObjectadattagot, m_contained, és növeli a modul zárolási számát.

A destruktor mérsékeli a modul zárolási számát.

CComPolyObject::~CComPolyObject

A destruktor.

~CComPolyObject();

Megjegyzések

Felszabadítja az összes lefoglalt erőforrást, meghívja a FinalRelease-t, és lecsökkenti a modul zárolási számát.

CComPolyObject::CreateInstance

Lehetővé teszi egy új CComPolyObject<contained> objektum létrehozását a CoCreateInstance többletterhelése nélkül.

static HRESULT WINAPI CreateInstance(
    LPUNKNOWN pUnkOuter,
    CComPolyObject<contained>** pp);

Paraméterek

Pp
[kifelé] Mutató egy CComPolyObject<contained> mutatóhoz. Sikertelenség esetén CreateInstance a pp értéke NULL.

Visszaadott érték

Standard HRESULT érték.

Megjegyzések

A visszaadott objektum hivatkozási száma nulla, ezért azonnal hívja meg AddRef , majd használja Release a hivatkozás felszabadítására az objektummutatón, amikor elkészült.

Ha nincs szüksége közvetlen hozzáférésre az objektumhoz, de mégis szeretne létrehozni egy új objektumot a többletterhelés CoCreateInstancenélkül, használja helyette a CComCoClass::CreateInstance parancsot .

CComPolyObject::FinalConstruct

Ez a metódus az objektumépítés utolsó szakaszában meghívva végrehajtja a végleges inicializálást az m_contained adattagon.

HRESULT FinalConstruct();

Visszaadott érték

Standard HRESULT érték.

CComPolyObject::FinalRelease

Az objektummegsemmisítés során meghívva ez a metódus felszabadítja a m_contained adattagot.

void FinalRelease();

CComPolyObject::m_contained

Az osztályból származtatott CComContainedObject objektum.

CComContainedObject<contained> m_contained;

Paraméterek

tartalmazott
[in] Az osztály a CComObjectRoot vagy a CComObjectRootEx, valamint az objektumon támogatni kívánt egyéb felületekből származik.

Megjegyzések

IUnknown m_contained a hívások a külső ismeretlenre vannak delegálva, ha az objektum összesítve van, vagy IUnknown ha az objektum nincs összesítve.

CComPolyObject::QueryInterface

A kért felületre mutató mutatót kér le.

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

Paraméterek

Q
A COM-felület.

iid
[in] A kért felület azonosítója.

ppvObject
[kifelé] Az iid által azonosított felületmutatóra mutató mutató. Ha az objektum nem támogatja ezt az interfészt, a ppvObject értéke NULL.

Pp
[kifelé] Mutató a felületre, amelyet __uuidof(Q)a következő azonosított: .

Visszaadott érték

Standard HRESULT érték.

Megjegyzések

Összesített objektum esetén, ha a kért felület az IUnknown, QueryInterface az összesített objektum sajátjára IUnknown mutató mutatót ad vissza, és növeli a referenciaszámot. Ellenkező esetben ez a metódus lekérdezi az interfészt az CComContainedObject adattagon keresztül, m_contained.

CComPolyObject::Release

Az objektum hivatkozásainak száma csökken.

STDMETHOD_(ULONG, Release)();

Visszaadott érték

A hibakeresési buildekben olyan értéket ad vissza, Release amely hasznos lehet a diagnosztika vagy a tesztelés során. A nem hibakeresési buildekben Release mindig 0 értéket ad vissza.

Lásd még

CComObjectRootEx osztály
DECLARE_POLY_AGGREGATABLE
osztály áttekintése