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.
Elementy członkowskie
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 CComPolyObject contained ><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 CComAggObject
CComObject
.
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 IUnknown
obiekt , oddzielony od obiektu IUnknown
zewnę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
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
Pp
[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
Q
Interfejs COM.
identyfikator 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.
Pp
[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