Condividi tramite


CComObjectRootEx Class

Questa classe fornisce metodi per la gestione di conteggio di riferimento a un handle per non sia aggregato di oggetti aggregati.

template< 
   class ThreadModel  
> 
class CComObjectRootEx : public CComObjectRootBase

Parametri

Membri

Metodi

CComObjectRootEx

Costruttore.

InternalAddRef

Incrementa il conteggio dei riferimenti per un oggetto non aggregato.

InternalRelease

Decrementa il conteggio dei riferimenti per un oggetto non aggregato.

Blocca

Se il modello di threading è multithreading, ottenere la proprietà di un oggetto sezione critica.

Sblocca

Se il modello di threading è multithreading, rilascia la proprietà di un oggetto sezione critica.

Metodi di CComObjectRootBase

FinalConstruct

Override della classe per eseguire eventuali inizializzazioni richieste dall'oggetto.

FinalRelease

Override della classe per eseguire la pulitura richieste dall'oggetto.

OuterAddRef

Incrementa il conteggio dei riferimenti per un oggetto aggregato.

OuterQueryInterface

Delegati a IUnknown esterno di un oggetto aggregato.

OuterRelease

Decrementa il conteggio dei riferimenti per un oggetto aggregato.

Funzioni statiche

InternalQueryInterface

Delegati a IUnknown di un oggetto non aggregato.

ObjectMain

Chiamata durante l'inizializzazione e la chiusura del form per le classi derivate è elencato nella mappa oggetto.

Membri di dati

m_dwRef

Con m_pOuterUnknown, parte di un'unione. Utilizzato quando l'oggetto non verranno aggregati per utilizzare il conteggio dei riferimenti AddRef e Release.

m_pOuterUnknown

Con m_dwRef, parte di un'unione. Utilizzato quando l'oggetto è aggregato per utilizzare un puntatore a sconosciuto esterno.

Note

Gestione di conteggio di riferimento oggetto handle diCComObjectRootEx sia per non aggregato di oggetti aggregati. Utilizza il conteggio di riferimento oggetto se l'oggetto non sta eseguendo l'aggregazione e utilizza il puntatore a sconosciuto esterno se l'oggetto sta eseguendo l'aggregazione. Per gli oggetti aggregati, i metodi CComObjectRootEx possono essere utilizzati per gestire l'errore dell'oggetto interno al costrutto e la protezione dell'oggetto esterno da utilizzare quando le interfacce interne vengono eliminate o l'oggetto interno viene eliminato.

Una classe che implementa un server COM deve ereditare da CComObjectRootEx o da CComObjectRoot.

Se la definizione della classe specifica la macro DECLARE_POLY_AGGREGATABLE, ATL crea un'istanza CComPolyObject<CYourClass> quando IClassFactory::CreateInstance viene chiamato. Durante la creazione, il valore di sconosciuto esterno sia selezionata. Se è NULL, IUnknown viene implementato per un oggetto non aggregato. Se sconosciuto esterno non è NULL, IUnknown viene implementato per un oggetto aggregato.

Se la classe non specifica la macro DECLARE_POLY_AGGREGATABLE, ATL crea un'istanza CAggComObject<CYourClass> per gli oggetti aggregati o un'istanza CComObject<CYourClass> per gli oggetti non aggregati.

Il vantaggio di l CComPolyObject è di evitare di avere sia CComAggObject che CComObject nel modulo per gestire i casi aggregati e non aggregati. Singole un oggetto CComPolyObject entrambi i casi. Di conseguenza, solo una copia del puntatore vtable e una copia delle funzioni esistenti nel form. Se il riferimento è elevata, questo può ridurre notevolmente la dimensione del modulo. Tuttavia, se il riferimento è ridotto, utilizzando CComPolyObject possono comportare una dimensione leggermente più grande del modulo perché non è ottimizzata per un oggetto aggregato o non aggregato, come vengono CComAggObject e CComObject.

Se l'oggetto è aggregato, IUnknown implementato da CComAggObject o da CComPolyObject. Queste classi delegato QueryInterface, AddRefe le chiamate ReleaseOuterQueryInterface, OuterAddRefe OuterRelease di CComObjectRootEx per inoltrare a sconosciuto esterno. In genere, eseguire l'override CComObjectRootEx::FinalConstruct della classe per creare tutti gli oggetti aggregati e si esegue l'override CComObjectRootEx::FinalRelease per liberare eventuali oggetti aggregati.

Se l'oggetto non verranno aggregati, IUnknown implementato da CComObject o da CComPolyObject. In questo caso, le chiamate a QueryInterface, AddRefe Release sono delegati InternalQueryInterface, InternalAddRefe InternalRelease di CComObjectRootEx eseguire le operazioni effettive.

Requisiti

Header: atlcom.h

Vedere anche

Riferimenti

CComAggObject Class

CComObject Class

CComPolyObject Class

Altre risorse

ATL Class Overview