Principi fondamentali di oggetti COM ATL
Nella figura seguente vengono illustrate la relazione tra le classi e le interfacce utilizzate per definire un oggetto COM ATL.
[!NOTA]
Questo diagramma mostra che CComObject è derivato da CYourClass mentre CComAggObject e CComPolyObject includono CYourClass come variabile membro.
Esistono tre modi per definire un oggetto COM ATL.L'opzione standard è di utilizzare la classe CComObject derivata da CYourClass.La seconda opzione consiste nel creare un oggetto aggregato utilizzando la classe CComAggObject.La terza opzione consiste di utilizzare la classe CComPolyObject.CComPolyObject funge da ibrido: può essere utilizzata come classe CComObject o come classe CComAggObject, a seconda di come viene innanzitutto creato.Per ulteriori informazioni sull'utilizzo della classe CComPolyObject, vedere Classe di CComPolyObject.
Quando si utilizza COM ATL standard, utilizzare due oggetti: un oggetto esterno e un oggetto interno.I client esterni accedono alla funzionalità dell'oggetto interno delle funzioni wrapper definite nell'oggetto esterno.l'oggetto esterno è di tipo CComObject.
Quando si utilizza un oggetto aggregato, l'oggetto esterno non fornisce wrapper per la funzionalità dell'oggetto interno.Invece, l'oggetto esterno fornisce un puntatore cui si accede direttamente dai client esterni.In questo scenario, l'oggetto esterno è di tipo CComAggObject.L'oggetto interno è una variabile membro dell'oggetto esterno ed è di tipo CYourClass.
Poiché il client non deve passare l'oggetto esterno interagire con l'oggetto interno, gli oggetti vengono aggregati in genere più efficienti.Inoltre, l'oggetto esterno non deve conoscere la funzionalità dell'oggetto aggregato, dato che l'interfaccia dell'oggetto aggregato è disponibile direttamente il client.Tuttavia, non tutti gli oggetti possono essere aggregati.Perché un oggetto sia aggregato, deve essere progettato con aggregazione in base.
ATL implementa IUnknown in due fasi:
ACComObject, CComAggObject, o CComPolyObject i metodi IUnknown.
CComObjectRoot o CComObjectRootEx gestisce il conteggio dei riferimenti e collegamenti esterni IUnknown.
Altri aspetti dell'oggetto COM ATL vengono gestiti da altre classi:
CComCoClass definisce la factory della classe predefinita dell'oggetto e il modello di aggregazione.
IDispatchImpl fornisce un'implementazione predefinita della parte IDispatch Interface di tutte le interfacce duali l'oggetto.
ISupportErrorInfoImpl implementa l'interfaccia ISupportErrorInfo che fornisce informazioni sugli errori può essere propagata nella catena di chiamate correttamente.
Argomenti della sezione
implementare CComObjectRootEx
Le voci della mappa di esempio COM di visualizzazione per implementare CComObjectRootEx.implementare CComObject, CComAggObject e CComPolyObject
Viene illustrato come le macro DECLARE_*_AGGREGATABLE influiscono sull'utilizzo CComObject, CComAggObjecte CComPolyObject.IDispatch e che supportano IErrorInfo
Vengono elencate le classi di implementazione ATL da utilizzare per il supporto IDispatch e interfacce IErrorInfo.IDispEventImpl di supporto
Vengono illustrate le operazioni necessarie per implementare un punto di connessione per la classe.Modificare la factory della classe predefinita e il modello di aggregazione
Mostrare che la macro da utilizzare per modificare la factory e l'aggregazione della classe predefinita modelli.creare un oggetto aggregato
Elenca i passaggi per creare un oggetto aggregato.
Sezioni correlate
Creare un progetto ATL
Vengono fornite informazioni sulla creazione di un oggetto COM ATL.ATL
Vengono forniti collegamenti ad argomenti concettuali sulla programmazione mediante Active Template Library.