Třída CComObjectRootEx
Tato třída poskytuje metody zpracování objektu referenční počet řízení agregované i nonaggregated objektů.
template<
class ThreadModel
>
class CComObjectRootEx : public CComObjectRootBase
Parametry
- ThreadModel
Třída implementovat metody, jejichž požadovaný model podprocesů.Model podprocesů můžete explicitně nastavením ThreadModel na CComSingleThreadModel, CComMultiThreadModel, nebo CComMultiThreadModelNoCS.Model podprocesů na serveru výchozí nastavení můžete přijmout ThreadModel na CComObjectThreadModel nebo CComGlobalsThreadModel.
Členy
Metody
Konstruktor. |
|
Zvýší počet odkazů pro objekt nonaggregated. |
|
Sníží počet odkaz nonaggregated objektu. |
|
Pokud model podprocesu podprocesy, získá vlastnictví objektu kritický oddíl. |
|
Pokud model podprocesu podprocesy, vydává vlastnictví objektu kritický oddíl. |
Metody CComObjectRootBase
Přepsat ve své třídě provést libovolnou inicializaci vyžadované k objektu. |
|
Přepsat ve své třídě provádět jakékoli vyčištění vyžadované k objektu. |
|
Zvýší počet odkazů pro agregovaný objekt. |
|
Delegáti na vnější IUnknown agregované objektu. |
|
Sníží odkaz počítat rozvedených objektu. |
Statická funkce
Deleguje na IUnknown nonaggregated objektu. |
|
Při inicializaci modulu a ukončení odvozených tříd uvedených v mapě objektu s názvem. |
Datové členy
S m_pOuterUnknown se část unie.Při objekt není agregované držet referenční počet AddRef a vydání. |
|
S m_dwRef se část unie.Používá, když je objekt agregovány do vnější neznámý podržením ukazatele. |
Poznámky
CComObjectRootExzpracovává objekt referenční počet řízení agregované i nonaggregated objektů.Pokud objekt není právě agregované a obsahuje ukazatel na vnější neznámý Pokud shromažďovány objekt obsahuje referenční počet objektů.Agregované objektů CComObjectRootEx metody zpracování selhání vnitřní objekt k výstavbě a chránit vnější objekt z odstranění při vydání vnitřní rozhraní nebo vnitřní objekt je odstraněn.
Třída, která implementuje COM server musí dědit z CComObjectRootEx nebo CComObjectRoot.
Pokud vaše definice třídy určuje DECLARE_POLY_AGGREGATABLE makra ATL vytvoří instanci CComPolyObject <CYourClass> při IClassFactory::CreateInstance se nazývá.Během vytváření se kontroluje hodnotu vnější neznámý.Pokud je NULL, IUnknown je implementováno pro objekt nonaggregated.Pokud není vnější neznámý NULL, IUnknown je implementováno pro agregovaný objekt.
Pokud vaše třída neurčuje DECLARE_POLY_AGGREGATABLE makra ATL vytvoří instanci CAggComObject <CYourClass> agregované objekty nebo instanci CComObject <CYourClass> nonaggregated objektů.
Výhodou použití CComPolyObject je zabránit obě CComAggObject a CComObject v modulu pro zpracování případů souhrnné a nonaggregated.Jeden CComPolyObject objektu zpracovává obou případech.Pouze jednu kopii virtuální tabulka a jednu kopii funkce, proto existují v modulu.Pokud vaše virtuální tabulka je velký, to podstatně zmenšit velikost poštovní modul.Však pokud vaše virtuální tabulka je malá, pomocí CComPolyObject může vést k poněkud větší velikost modulu protože není optimalizována pro souhrnné nebo nonaggregated objektu, jako jsou CComAggObject a CComObject .
Pokud je objekt seskupeny, IUnknown je implementována CComAggObject nebo CComPolyObject .Přenést tyto třídy QueryInterface , AddRef , a vydání volání na CComObjectRootEx na OuterQueryInterface , OuterAddRef , a OuterRelease předat vnější neznámý.Obvykle je přepsat CComObjectRootEx::FinalConstruct ve své třídě vytvořit souhrnné objekty a přepsání CComObjectRootEx::FinalRelease uvolnit všechny agregované objekty.
Pokud není objekt seskupeny, IUnknown je implementována CComObject nebo CComPolyObject .V případě volání do QueryInterface , AddRef , a vydání jsou CComObjectRootEx na InternalQueryInterface , InternalAddRef , a InternalRelease provést vlastní operace.
Požadavky
Záhlaví: atlcom.h