Klasa CComObjectRootEx
Ta klasa zapewnia metod obsługi zarządzania zliczaniem odwołań obiektów dla obiektów nonaggregated i zagregowane.
template<
class ThreadModel
>
class CComObjectRootEx : public CComObjectRootBase
Parametry
- ThreadModel
Klasy, w których metody wdrożenia żądany model wątka.Można jawnie wybrać model wątka przez ustawienie ThreadModel do CComSingleThreadModel, CComMultiThreadModel, lub CComMultiThreadModelNoCS.Serwer domyślny model wątków można zaakceptować ustawienie ThreadModel do CComObjectThreadModel lub CComGlobalsThreadModel.
Członkowie
Metody
Konstruktor. |
|
Zwiększa licznik odniesienia dla obiektu nonaggregated. |
|
Zmniejsza zliczanie odniesienia dla obiektu nonaggregated. |
|
Jeśli model wątku jest wielowątkowym, uzyskuje własność obiektu sekcji krytycznej. |
|
Jeśli model wątku jest wielowątkowym, zwalnia własności obiektu sekcji krytycznej. |
Metody CComObjectRootBase
Zastąpić w klasie, aby wykonać inicjowania, wszelkie wymagane przez obiekt. |
|
Zastąpić w klasie do wykonywania oczyszczania wymaganego przez obiekt. |
|
Zwiększa licznika odwołań do obiektu zagregowane. |
|
Pełnomocnicy do zewnętrznego IUnknown zagregowane obiektu. |
|
Zmniejsza zliczanie odniesienia dla obiektu zagregowane. |
Funkcje statyczne
Deleguje do IUnknown nonaggregated obiektu. |
|
Nazywane podczas inicjowania modułu i zakończenia dla klas pochodnych wymienionych w mapie obiektu. |
Członkowie danych
Z m_pOuterUnknown, część Unii.Używany, gdy obiekt nie jest zagregowane do przechowywania licznika odwołań z AddRef i wersji. |
|
Z m_dwRef, część Unii.Używana, gdy obiekt jest zagregowane do kursora do zewnętrznego nieznany. |
Uwagi
CComObjectRootExobsługuje zarządzania zliczaniem odwołań obiektów dla obiektów nonaggregated i zagregowane.Jeśli obiekt nie sumowanej i przytrzyma wskaźnik do zewnętrznego nieznany, jeśli obiekt jest sumowanej przechowuje licznika odwołań do obiektu.Dla obiektów zagregowane CComObjectRootEx metod można obsłużyć błąd wewnętrzny obiektu do konstruowania i chronić zewnętrznego obiektu przed usunięciem po zwolnieniu są interfejsy wewnętrzne lub wewnętrzny jest usuwany.
Klasy, która implementuje serwer COM musi dziedziczyć po CComObjectRootEx lub CComObjectRoot.
Jeśli Twój definicja klasy Określa DECLARE_POLY_AGGREGATABLE makro, ATL tworzy wystąpienie CComPolyObject <CYourClass> po IClassFactory::CreateInstance jest nazywany.Podczas tworzenia jest sprawdzana wartość unknown zewnętrzne.Jeśli jest NULL, IUnknown dla obiektu nonaggregated.Jeśli nie jest nieznany zewnętrznej NULL, IUnknown jest zaimplementowana zagregowane obiektu.
Jeśli nie określono klasy DECLARE_POLY_AGGREGATABLE makro, ATL tworzy wystąpienie CAggComObject <CYourClass> dla zagregowanych obiektów lub instancji CComObject <CYourClass> nonaggregated obiektów.
Zaletą korzystania z CComPolyObject jest uniknięcie posiadające obie CComAggObject i CComObject w modułu obsługi przypadkach zagregowanych i nonaggregated.Jeden CComPolyObject obiekt obsługuje oba przypadki.Dlatego tylko jedną kopię vtable i jedną kopię funkcji istnieje w module.Rozmiar modułu można zmniejszyć znacznie vtable użytkownika jest duża.Jednakże, jeśli Twój vtable jest mały, za pomocą CComPolyObject może spowodować nieco większy rozmiar modułu, ponieważ nie jest zoptymalizowany dla obiektu nonaggregated lub zagregowane są CComAggObject i CComObject.
Jeśli obiekt jest zagregowane, IUnknown jest implementowana przez CComAggObject lub CComPolyObject.Delegować te klasy QueryInterface, AddRef, i wersji wzywa do CComObjectRootExna OuterQueryInterface, OuterAddRef, i OuterRelease do przekazania nieznany zewnętrzne.Zazwyczaj zastąpić CComObjectRootEx::FinalConstruct w klasie tworzyć obiekty zagregowanych i zastąpić CComObjectRootEx::FinalRelease do żadnego wolnego zagregowane obiektów.
Jeśli obiekt nie jest zagregowane, IUnknown jest implementowana przez CComObject lub CComPolyObject.W przypadku wywołań QueryInterface, AddRef, i wersji są delegowane do CComObjectRootExna InternalQueryInterface, InternalAddRef, i InternalRelease do wykonywania operacji rzeczywiste.
Wymagania
Nagłówek: atlcom.h