CComPolyObject – třída
Tato třída implementuje IUnknown
agregovaný nebo neagregovaný objekt.
Syntaxe
template<class contained>
class CComPolyObject : public IUnknown,
public CComObjectRootEx<contained::_ThreadModel::ThreadModelNoCS>
Parametry
obsahoval
Třída odvozená z CComObjectRoot nebo CComObjectRootEx, stejně jako z jakéhokoli jiného rozhraní, které chcete podporovat u objektu.
Členové
Veřejné konstruktory
Název | Popis |
---|---|
CComPolyObject::CComPolyObject | Konstruktor |
CComPolyObject::~CComPolyObject | Destruktor. |
Veřejné metody
Název | Popis |
---|---|
CComPolyObject::AddRef | Zvýší počet odkazů objektu. |
CComPolyObject::CreateInstance | (Statické) Umožňuje vytvořit nový objekt CComPolyObject contained ><bez režie CoCreateInstance. |
CComPolyObject::FinalConstruct | Provede konečnou inicializaci .m_contained |
CComPolyObject::FinalRelease | Provádí konečné zničení m_contained . |
CComPolyObject::QueryInterface | Načte ukazatel na požadované rozhraní. |
CComPolyObject::Release | Sníží počet odkazů objektu. |
Veřejné datové členy
Název | Popis |
---|---|
CComPolyObject::m_contained | Deleguje IUnknown volání na vnější neznámé, pokud je objekt agregován nebo na IUnknown objekt, pokud objekt není agregován. |
Poznámky
CComPolyObject
implementuje IUnknown pro agregovaný nebo neagregovaný objekt.
Při vytvoření instance CComPolyObject
je zaškrtnutá hodnota vnější neznámé. Pokud má hodnotu NULL, IUnknown
implementuje se pro neagregovaný objekt. Pokud vnější neznámý není NULL, IUnknown
je implementováno pro agregovaný objekt.
Výhodou použití CComPolyObject
je, že se v modulu vyhněte tomu, aby se v modulu zpracovávaly agregované a neagregované případy jak CComAggObject, tak CComObject. Jeden CComPolyObject
objekt zpracovává oba případy. To znamená, že v modulu existuje jenom jedna kopie virtuální tabulky a jedna kopie funkcí. Pokud je vaše virtuální tabulka velká, může se tím podstatně zmenšit velikost modulu. Pokud je však tabulka vtable malá, může použití CComPolyObject
vést k mírně větší velikosti modulu, protože není optimalizovaná pro agregovaný nebo neagregovaný objekt, jak jsou CComAggObject
a CComObject
.
Pokud je v definici třídy objektu zadáno DECLARE_POLY_AGGREGATABLE makro, CComPolyObject
použije se k vytvoření objektu. DECLARE_POLY_AGGREGATABLE se automaticky deklarují, pokud použijete Průvodce projektem ATL k vytvoření úplného ovládacího prvku nebo ovládacího prvku Aplikace Internet Explorer.
Pokud je objekt agregovaný, CComPolyObject
má svůj vlastní IUnknown
, oddělený od vnějšího objektu IUnknown
a udržuje svůj vlastní referenční počet. CComPolyObject
používá objekt CComContainedObject k delegování na vnější neznámý objekt.
Další informace o agregaci najdete v článku Základy objektů MODELU COM ATL.
Hierarchie dědičnosti
CComObjectRootBase
IUnknown
CComPolyObject
Požadavky
Hlavička: atlcom.h
CComPolyObject::AddRef
Zvýší počet odkazů na objekt.
STDMETHOD_(ULONG, AddRef)();
Návratová hodnota
Hodnota, která může být užitečná pro diagnostiku nebo testování.
CComPolyObject::CComPolyObject
Konstruktor
CComPolyObject(void* pv);
Parametry
Pv
[v] Ukazatel na vnější neznámý, pokud má být objekt agregován, nebo NULL, pokud objekt není agregován.
Poznámky
Inicializuje CComContainedObject
datový člen, m_contained a zvýší počet zámků modulu.
Destruktor dekrementuje počet zámků modulu.
CComPolyObject::~CComPolyObject
Destruktor.
~CComPolyObject();
Poznámky
Uvolní všechny přidělené prostředky, zavolá FinalRelease a sníží počet zámků modulu.
CComPolyObject::CreateInstance
Umožňuje vytvořit nový objekt CComPolyObjectcontained
>< bez režie CoCreateInstance.
static HRESULT WINAPI CreateInstance(
LPUNKNOWN pUnkOuter,
CComPolyObject<contained>** pp);
Parametry
Pp
[ven] Ukazatel na ukazatel CComPolyObject><contained
. Pokud CreateInstance
je neúspěšný, hodnota pp je nastavena na hodnotu NULL.
Návratová hodnota
Standardní hodnota HRESULT.
Poznámky
Vrácený objekt má počet odkazů na nulu, takže volání AddRef
okamžitě použijte Release
k uvolnění odkazu na ukazatel objektu, jakmile budete hotovi.
Pokud nepotřebujete přímý přístup k objektu, ale přesto chcete vytvořit nový objekt bez režie CoCreateInstance
, použijte místo toho CComCoClass::CreateInstance .
CComPolyObject::FinalConstruct
Volá se během konečných fází konstrukce objektu, tato metoda provádí všechny konečné inicializace u m_contained datového členu .
HRESULT FinalConstruct();
Návratová hodnota
Standardní hodnota HRESULT.
CComPolyObject::FinalRelease
Volá se při zničení objektu , tato metoda uvolní m_contained datový člen.
void FinalRelease();
CComPolyObject::m_contained
A CComContainedObject objekt odvozený z vaší třídy.
CComContainedObject<contained> m_contained;
Parametry
obsahoval
[v] Třída odvozená z CComObjectRoot nebo CComObjectRootEx, stejně jako z jakéhokoli jiného rozhraní, které chcete podporovat u objektu.
Poznámky
IUnknown
volání jsou m_contained
delegována na vnější neznámé, pokud je objekt agregován, nebo na IUnknown
tento objekt, pokud objekt není agregován.
CComPolyObject::QueryInterface
Načte ukazatel na požadované rozhraní.
STDMETHOD(QueryInterface)(REFIID iid, void** ppvObject);
template <class Q>
HRESULT QueryInterface(Q** pp);
Parametry
Q
Rozhraní MODELU COM.
iid
[v] Identifikátor požadovaného rozhraní.
ppvObject
[ven] Ukazatel na ukazatel rozhraní identifikovaný pomocí iid. Pokud objekt nepodporuje toto rozhraní, ppvObject je nastaven na HODNOTU NULL.
Pp
[ven] Ukazatel na rozhraní identifikovaný .__uuidof(Q)
Návratová hodnota
Standardní hodnota HRESULT.
Poznámky
U agregovaného objektu, pokud je IUnknown
požadované rozhraní , QueryInterface
vrátí ukazatel na vlastní IUnknown
agregovaný objekt a zvýší počet odkazů. V opačném případě se tato metoda dotazuje na rozhraní prostřednictvím datového členu CComContainedObject
m_contained.
CComPolyObject::Release
Sníží počet odkazů na objekt.
STDMETHOD_(ULONG, Release)();
Návratová hodnota
V buildech ladění vrátí hodnotu, Release
která může být užitečná pro diagnostiku nebo testování. V nedebugních buildech Release
vždy vrátí hodnotu 0.
Viz také
CComObjectRootEx – třída
DECLARE_POLY_AGGREGATABLE
Přehled třídy