Udostępnij za pośrednictwem


Klasa CComPolyObject

Ta klasa implementuje IUnknown zagregowany lub nieagregowany obiekt.

Składnia

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

Parametry

Zawarte
Klasa, pochodząca z CComObjectRoot lub CComObjectRootEx, a także z innych interfejsów, które mają być obsługiwane w obiekcie.

Członkowie

Konstruktory publiczne

Nazwa/nazwisko opis
CComPolyObject::CComPolyObject Konstruktor.
CComPolyObject::~CComPolyObject Destruktora.

Metody publiczne

Nazwa/nazwisko opis
CComPolyObject::AddRef Zwiększa liczbę odwołań do obiektu.
CComPolyObject::CreateInstance (Statyczne) Umożliwia utworzenie nowego obiektu CComPolyObjectcontained>< bez nakładu pracy nad klasą CoCreateInstance.
CComPolyObject::FinalConstruct Wykonuje finalną inicjację elementu m_contained.
CComPolyObject::FinalRelease Wykonuje ostateczne zniszczenie obiektu m_contained.
CComPolyObject::QueryInterface Pobiera wskaźnik do żądanego interfejsu.
CComPolyObject::Release Dekrementuje liczbę odwołań do obiektu.

Publiczne elementy członkowskie danych

Nazwa/nazwisko opis
CComPolyObject::m_contained Delegaty IUnknown wywołuje zewnętrzne nieznane, jeśli obiekt jest zagregowany lub do IUnknown obiektu, jeśli obiekt nie jest agregowany.

Uwagi

CComPolyObject implementuje element IUnknown dla zagregowanego lub nieagregowanego obiektu.

Po utworzeniu CComPolyObject wystąpienia jest sprawdzana wartość zewnętrznej nieznanej. Jeśli ma wartość NULL, IUnknown jest implementowany dla obiektu nieagregowanego. Jeśli zewnętrzna nieznana wartość nie ma wartości NULL, IUnknown jest implementowana dla zagregowanego obiektu.

Zaletą użycia CComPolyObject jest unikanie obsługi zagregowanych i nieagregowanych przypadków zarówno CComAggObject , jak i CComObject w module. Pojedynczy CComPolyObject obiekt obsługuje oba przypadki. Oznacza to, że w module istnieje tylko jedna kopia tabeli wirtualnej i jedna kopia funkcji. Jeśli twoja tabela wirtualna jest duża, może to znacznie zmniejszyć rozmiar modułu. Jeśli jednak tabela wirtualna jest mała, użycie CComPolyObject metody może spowodować nieco większy rozmiar modułu, ponieważ nie jest zoptymalizowany pod kątem zagregowanego lub nieagregowanego obiektu, podobnie jak i CComAggObjectCComObject.

Jeśli makro DECLARE_POLY_AGGREGATABLE zostanie określone w definicji klasy obiektu, CComPolyObject zostanie użyte do utworzenia obiektu. DECLARE_POLY_AGGREGATABLE zostaną automatycznie zadeklarowane, jeśli użyjesz Kreatora projektu ATL do utworzenia pełnej kontroli lub kontrolki programu Internet Explorer.

W przypadku agregacji CComPolyObject obiekt ma własny IUnknownobiekt , oddzielony od obiektu IUnknownzewnętrznego i zachowuje własną liczbę odwołań. CComPolyObject Używa obiektu CComContainedObject do delegowania do zewnętrznej nieznanej.

Aby uzyskać więcej informacji na temat agregacji, zobacz artykuł Podstawy obiektów COM ATL.

Hierarchia dziedziczenia

CComObjectRootBase

Ccomobjectrootex

IUnknown

CComPolyObject

Wymagania

Nagłówek: atlcom.h

CComPolyObject::AddRef

Zwiększa liczbę odwołań względem obiektu.

STDMETHOD_(ULONG, AddRef)();

Wartość zwracana

Wartość, która może być przydatna do diagnostyki lub testowania.

CComPolyObject::CComPolyObject

Konstruktor.

CComPolyObject(void* pv);

Parametry

Pv
[in] Wskaźnik do zewnętrznej nieznanej, jeśli obiekt ma być zagregowany, lub NULL, jeśli obiekt nie jest agregowany.

Uwagi

Inicjuje CComContainedObject element członkowski danych, m_contained i zwiększa liczbę blokad modułu.

Destruktor destruktor dekrementuje liczbę blokad modułu.

CComPolyObject::~CComPolyObject

Destruktora.

~CComPolyObject();

Uwagi

Zwalnia wszystkie przydzielone zasoby, wywołuje funkcję FinalRelease i usuwa liczbę blokad modułu.

CComPolyObject::CreateInstance

Umożliwia utworzenie nowego obiektu CComPolyObjectcontained>< bez nakładu pracy nad klasą CoCreateInstance.

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

Parametry

S
[out] Wskaźnik do wskaźnika CComPolyObject><contained. Jeśli CreateInstance nie powiedzie się, wartość pp jest ustawiona na wartość NULL.

Wartość zwracana

Standardowa wartość HRESULT.

Uwagi

Zwrócony obiekt ma liczbę odwołań zero, więc wywołaj AddRef natychmiast, a następnie użyj polecenia Release , aby zwolnić odwołanie w wskaźniku obiektu po zakończeniu.

Jeśli nie potrzebujesz bezpośredniego dostępu do obiektu, ale nadal chcesz utworzyć nowy obiekt bez narzutu CoCreateInstance, zamiast tego użyj klasy CComCoClass::CreateInstance .

CComPolyObject::FinalConstruct

Wywoływana podczas końcowych etapów budowy obiektu ta metoda wykonuje ostateczną inicjację elementu członkowskiego danych m_contained .

HRESULT FinalConstruct();

Wartość zwracana

Standardowa wartość HRESULT.

CComPolyObject::FinalRelease

Wywoływana podczas niszczenia obiektu ta metoda zwalnia m_contained składową danych.

void FinalRelease();

CComPolyObject::m_contained

Obiekt CComContainedObject pochodzący z klasy.

CComContainedObject<contained> m_contained;

Parametry

Zawarte
[in] Klasa, pochodząca z CComObjectRoot lub CComObjectRootEx, a także z innych interfejsów, które mają być obsługiwane w obiekcie.

Uwagi

IUnknown wywołania są m_contained delegowane do zewnętrznej nieznanej, jeśli obiekt jest zagregowany, lub do IUnknown obiektu, jeśli obiekt nie jest zagregowany.

CComPolyObject::QueryInterface

Pobiera wskaźnik do żądanego interfejsu.

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

Parametry

P
Interfejs COM.

Iid
[in] Identyfikator żądanego interfejsu.

ppvObject
[out] Wskaźnik do wskaźnika interfejsu zidentyfikowany przez identyfikator iid. Jeśli obiekt nie obsługuje tego interfejsu, obiekt ppvObject ma ustawioną wartość NULL.

S
[out] Wskaźnik do interfejsu zidentyfikowanego przez __uuidof(Q).

Wartość zwracana

Standardowa wartość HRESULT.

Uwagi

W przypadku zagregowanego obiektu, jeśli żądany interfejs to IUnknown, QueryInterface zwraca wskaźnik do własnych IUnknown zagregowanych obiektów i zwiększa liczbę odwołań. W przeciwnym razie ta metoda wykonuje zapytania dotyczące interfejsu CComContainedObject za pośrednictwem elementu członkowskiego danych, m_contained.

CComPolyObject::Release

Dekrementuje liczbę odwołań dla obiektu.

STDMETHOD_(ULONG, Release)();

Wartość zwracana

W kompilacjach debugowania zwraca wartość, Release która może być przydatna do diagnostyki lub testowania. W kompilacjach Release innych niżbug zawsze zwraca wartość 0.

Zobacz też

Klasa CComObjectRootEx
DECLARE_POLY_AGGREGATABLE
Omówienie klasy