Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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 IUnknownesterno 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