Classe CComPolyObject
Questa classe implementa IUnknown
per un oggetto aggregato o non aggregato.
Sintassi
template<class contained>
class CComPolyObject : public IUnknown,
public CComObjectRootEx<contained::_ThreadModel::ThreadModelNoCS>
Parametri
contenuto
La classe, derivata da CComObjectRoot o CComObjectRootEx, nonché da qualsiasi altra interfaccia che si vuole supportare sull'oggetto.
Membri
Costruttori pubblici
Nome | Descrizione |
---|---|
CComPolyObject::CComPolyObject | Costruttore. |
CComPolyObject::~CComPolyObject | Distruttore. |
Metodi pubblici
Nome | Descrizione |
---|---|
CComPolyObject::AddRef | Incrementa il conteggio dei riferimenti dell'oggetto. |
CComPolyObject::CreateInstance | (Statico) Consente di creare un nuovo oggetto CComPolyObject< > contained senza sovraccarico di CoCreateInstance. |
CComPolyObject::FinalConstruct | Esegue l'inizializzazione finale di m_contained . |
CComPolyObject::FinalRelease | Esegue la distruzione finale di m_contained . |
CComPolyObject::QueryInterface | Recupera un puntatore all'interfaccia richiesta. |
CComPolyObject::Release | Decrementa il conteggio dei riferimenti dell'oggetto. |
Membri dati pubblici
Nome | Descrizione |
---|---|
CComPolyObject::m_contained | IUnknown I delegati chiamano all'oggetto sconosciuto esterno se l'oggetto viene aggregato o all'oggetto IUnknown se l'oggetto non è aggregato. |
Osservazioni:
CComPolyObject
implementa IUnknown per un oggetto aggregato o non aggregato.
Quando viene creata un'istanza di CComPolyObject
, viene controllato il valore dell'elemento sconosciuto esterno. Se è NULL, IUnknown
viene implementato per un oggetto nonaggregato. Se l'elemento sconosciuto esterno non è NULL, IUnknown
viene implementato per un oggetto aggregato.
Il vantaggio dell'uso CComPolyObject
consiste nell'evitare di avere sia CComAggObject che CComObject nel modulo per gestire i casi aggregati e non aggregati. Un singolo CComPolyObject
oggetto gestisce entrambi i casi. Ciò significa che nel modulo è presente una sola copia della tabella virtuale e una copia delle funzioni. Se la tabella virtuale è grande, questa operazione può ridurre notevolmente le dimensioni del modulo. Tuttavia, se la tabella virtuale è piccola, l'uso CComPolyObject
di può comportare dimensioni del modulo leggermente maggiori perché non è ottimizzato per un oggetto aggregato o nonaggregato, come sono CComAggObject
e CComObject
.
Se la macro DECLARE_POLY_AGGREGATABLE viene specificata nella definizione della classe dell'oggetto, CComPolyObject
verrà utilizzata per creare l'oggetto. DECLARE_POLY_AGGREGATABLE verrà dichiarata automaticamente se si utilizza la Creazione guidata progetto ATL per creare un controllo completo o un controllo Internet Explorer.
Se aggregato, l'oggetto CComPolyObject
ha il proprio IUnknown
, separato dall'oggetto IUnknown
esterno e mantiene il proprio conteggio dei riferimenti. CComPolyObject
usa CComContainedObject per delegare all'oggetto sconosciuto esterno.
Per altre informazioni sull'aggregazione, vedere l'articolo Nozioni fondamentali sugli oggetti COM ATL.
Gerarchia di ereditarietà
CComObjectRootBase
IUnknown
CComPolyObject
Requisiti
Intestazione: atlcom.h
CComPolyObject::AddRef
Incrementa il conteggio dei riferimenti sull'oggetto .
STDMETHOD_(ULONG, AddRef)();
Valore restituito
Valore che può essere utile per la diagnostica o il test.
CComPolyObject::CComPolyObject
Costruttore.
CComPolyObject(void* pv);
Parametri
Pv
[in] Puntatore all'oggetto sconosciuto esterno se l'oggetto deve essere aggregato o NULL se l'oggetto non è aggregato.
Osservazioni:
Inizializza il CComContainedObject
membro dati, m_contained e incrementa il conteggio dei blocchi del modulo.
Il distruttore decrementa il conteggio dei blocchi del modulo.
CComPolyObject::~CComPolyObject
Distruttore.
~CComPolyObject();
Osservazioni:
Libera tutte le risorse allocate, chiama FinalRelease e decrementa il conteggio dei blocchi del modulo.
CComPolyObject::CreateInstance
Consente di creare un nuovo oggetto CComPolyObject<>contained
senza sovraccarico di CoCreateInstance.
static HRESULT WINAPI CreateInstance(
LPUNKNOWN pUnkOuter,
CComPolyObject<contained>** pp);
Parametri
Pp
[out] Puntatore a un puntatore CComPolyObject><contained
. Se CreateInstance
ha esito negativo, pp è impostato su NULL.
Valore restituito
Valore HRESULT standard.
Osservazioni:
L'oggetto restituito ha un conteggio dei riferimenti pari a zero, quindi chiamare AddRef
immediatamente, quindi usare Release
per liberare il riferimento sul puntatore all'oggetto al termine.
Se non è necessario l'accesso diretto all'oggetto, ma si vuole comunque creare un nuovo oggetto senza il sovraccarico di CoCreateInstance
, usare invece CComCoClass::CreateInstance .
CComPolyObject::FinalConstruct
Chiamato durante le fasi finali della costruzione di oggetti, questo metodo esegue qualsiasi inizializzazione finale sul membro dati m_contained .
HRESULT FinalConstruct();
Valore restituito
Valore HRESULT standard.
CComPolyObject::FinalRelease
Chiamato durante la distruzione dell'oggetto, questo metodo libera il membro dati m_contained .
void FinalRelease();
CComPolyObject::m_contained
Oggetto CComContainedObject derivato dalla classe.
CComContainedObject<contained> m_contained;
Parametri
contenuto
[in] La classe, derivata da CComObjectRoot o CComObjectRootEx, nonché da qualsiasi altra interfaccia che si vuole supportare sull'oggetto.
Osservazioni:
IUnknown
le chiamate tramite m_contained
vengono delegate all'oggetto sconosciuto esterno se l'oggetto viene aggregato o a di IUnknown
questo oggetto se l'oggetto non è aggregato.
CComPolyObject::QueryInterface
Recupera un puntatore all'interfaccia richiesta.
STDMETHOD(QueryInterface)(REFIID iid, void** ppvObject);
template <class Q>
HRESULT QueryInterface(Q** pp);
Parametri
Q
Interfaccia COM.
iid
[in] Identificatore dell'interfaccia richiesta.
ppvObject
[out] Puntatore al puntatore dell'interfaccia identificato da iid. Se l'oggetto non supporta questa interfaccia, ppvObject è impostato su NULL.
Pp
[out] Puntatore all'interfaccia identificata da __uuidof(Q)
.
Valore restituito
Valore HRESULT standard.
Osservazioni:
Per un oggetto aggregato, se l'interfaccia richiesta è IUnknown
, QueryInterface
restituisce un puntatore al proprio IUnknown
oggetto aggregato e incrementa il conteggio dei riferimenti. In caso contrario, questo metodo esegue una query per l'interfaccia tramite il CComContainedObject
membro dati m_contained.
CComPolyObject::Release
Decrementa il conteggio dei riferimenti sull'oggetto .
STDMETHOD_(ULONG, Release)();
Valore restituito
Nelle compilazioni di debug restituisce Release
un valore che può essere utile per la diagnostica o il test. Nelle compilazioni non di tipoebug restituisce Release
sempre 0.
Vedi anche
Classe CComObjectRootEx
DECLARE_POLY_AGGREGATABLE
Cenni preliminari sulla classe