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
- ThreadModel
La classe dei metodi implementano il modello di threading desiderato. È possibile scegliere in modo esplicito il modello di threading impostando ThreadModel a CComSingleThreadModel, a CComMultiThreadModel, o a CComMultiThreadModelNoCS. È possibile accettare il modello di threading predefinito del server impostando ThreadModel a CComObjectThreadModel o a CComGlobalsThreadModel.
Membri
Metodi
Costruttore. |
|
Incrementa il conteggio dei riferimenti per un oggetto non aggregato. |
|
Decrementa il conteggio dei riferimenti per un oggetto non aggregato. |
|
Se il modello di threading è multithreading, ottenere la proprietà di un oggetto sezione critica. |
|
Se il modello di threading è multithreading, rilascia la proprietà di un oggetto sezione critica. |
Metodi di CComObjectRootBase
Override della classe per eseguire eventuali inizializzazioni richieste dall'oggetto. |
|
Override della classe per eseguire la pulitura richieste dall'oggetto. |
|
Incrementa il conteggio dei riferimenti per un oggetto aggregato. |
|
Delegati a IUnknown esterno di un oggetto aggregato. |
|
Decrementa il conteggio dei riferimenti per un oggetto aggregato. |
Funzioni statiche
Delegati a IUnknown di un oggetto non aggregato. |
|
Chiamata durante l'inizializzazione e la chiusura del form per le classi derivate è elencato nella mappa oggetto. |
Membri di dati
Con m_pOuterUnknown, parte di un'unione. Utilizzato quando l'oggetto non verranno aggregati per utilizzare il conteggio dei riferimenti AddRef e Release. |
|
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