CComObjectRootEx

temp&latelt, klasaThreadModel &BT;
Klasa CComObjectRootEx: CComObjectRootBase publicznych

Parametry

ThreadModel

Klasa, której metody wdrożenia żądany model wątka. Można jawnie model wątka przez ustawienie ThreadModel CComSingleThreadModel, CComMultiThreadModellub CComMultiThreadModelNoCS. Można zaakceptować serwer domyślny wątku model przez ustawienie ThreadModel CComObjectThreadModel lub CComGlobalsThreadModel.

CComObjectRootEx obsługuje obiekt zarządzania zliczaniem odwołań do obiektów zarówno nonaggregated, jak i zbiorcze. Przechowuje licznika odwołań obiektu, jeśli obiekt jest nie sumowanej i przytrzyma wskaźnik do zewnętrznego nieznany, jeśli obiekt jest sumowanej. Zagregowane obiektów metody CComObjectRootEx mogą być używane do obsługi błąd wewnętrzny obiekt do skonstruowania oraz w celu ochrony obiektu zewnętrznego przed usunięciem, wewnętrzne interfejsy są uwalniane lub wewnętrzny obiekt jest usuwany.

Klasy, która implementuje serwer COM musi dziedziczyć po CComObjectRootEx lub CComObjectRoot.

Jeśli definicja klasy określa makra DECLARE_POLY_AGGREGATABLE , ATL tworzy instancję CComPolyObjectlt;CYourClass > kiedy nazywa się IClassFactory::CreateInstance . Podczas tworzenia wartości zewnętrznej nieznany jest zaznaczone. Jeśli jest NULL, IUnknown jest zaimplementowana dla obiektu nonaggregated. Jeśli zewnętrzne nieznany jest NULL, IUnknown jest zaimplementowana dla obiektu zagregowane.

Jeśli klasa nie określono makra DECLARE_POLY_AGGREGATABLE , ATL tworzy instancję CComObjectlt;CYourClass > dla zagregowanych obiektów lub wystąpienie CComAggObject <CYourClass> dla obiektów nonaggregated.

Zaletą używania CComPolyObject jest, można uniknąć, posiadające zarówno CComAggObject , jak i CComObject w module obsługi przypadkach zagregowanych i nonaggregated. Pojedynczy obiekt CComPolyObject obsługuje oba przypadki. W związku z tym tylko jedna kopia Tablica metod wirtualnych i jedną kopię funkcji istnieje w module. W przypadku dużych sieci Tablica metod wirtualnych, to znacznie zmniejszyć rozmiar modułu. Jednakże w przypadku małych sieci Tablica metod wirtualnych, przy użyciu CComPolyObject może spowodować nieco większy rozmiar modułu ponieważ nie jest optymalizowany dla obiektu zagregowanych lub nonaggregated, jak CComAggObject i CComObject.

Makro DECLARE_POLY_AGGREGATABLE jest automatycznie dodawany do definicji klasy przez kreatora obiektu ATL podczas tworzenia Pełna kontrola lub formant programu Internet Explorer.

Jeśli obiekt jest zagregowane, IUnknown jest wdrażany przez CComAggObject lub CComPolyObject. Klasy te delegować QueryInterface, AddRefi uwalniania wywołania, CComObjectRootEx OuterQueryInterface, OuterAddRefi OuterRelease do przekazania zewnętrzne nieznane. Zazwyczaj zastąpić CComObjectRootEx::FinalConstruct w klasie utworzyć obiekty zagregowanych i zastąpić CComObjectRootEx::FinalRelease do swobodnego obiekty zagregowane.

Jeśli obiekt nie jest zagregowane, IUnknown jest implementowany przez CComObject lub CComPolyObject. W tym przypadku wywołania metody QueryInterface, AddRefi wydania są delegowane do InternalQueryInterface CComObjectRootEx, InternalAddRefi InternalRelease do rzeczywistych operacji.

# include lt;atlcom.h>

Członkowie klasy

Zobacz też CComAggObject, CComObject, CComPolyObject

Index