Nozioni fondamentali sugli oggetti COM ATL
La figura seguente illustra 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 consiste nell'usare la CComObject
classe derivata da CYourClass
. La seconda opzione consiste nel creare un oggetto aggregato usando la CComAggObject
classe . La terza opzione consiste nell'usare la CComPolyObject
classe . CComPolyObject
funge da ibrido: può funzionare come CComObject
classe o come CComAggObject
classe, a seconda della modalità di creazione. Per altre informazioni su come usare la CComPolyObject
classe , vedere Classe CComPolyObject.
Quando si usa ATL COM standard, si usano due oggetti: un oggetto esterno e un oggetto interno. I client esterni accedono alla funzionalità dell'oggetto interno tramite le funzioni wrapper definite nell'oggetto esterno. L'oggetto esterno è di tipo CComObject
.
Quando si usa un oggetto aggregato, l'oggetto esterno non fornisce wrapper per la funzionalità dell'oggetto interno. L'oggetto esterno fornisce invece un puntatore accessibile 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 attraverso l'oggetto esterno per interagire con l'oggetto interno, gli oggetti aggregati sono in genere più efficienti. Inoltre, l'oggetto esterno non deve conoscere la funzionalità dell'oggetto aggregato, dato che l'interfaccia dell'oggetto aggregato è direttamente disponibile per il client. Tuttavia, non tutti gli oggetti possono essere aggregati. Affinché un oggetto venga aggregato, deve essere progettato tenendo presente l'aggregazione.
ATL implementa IUnknown in due fasi:
CComObject, CComAggObject o CComPolyObject implementa i
IUnknown
metodi .CComObjectRoot o CComObjectRootEx gestisce il conteggio dei riferimenti e i puntatori esterni di
IUnknown
.
Altri aspetti dell'oggetto ATL COM vengono gestiti da altre classi:
CComCoClass definisce la class factory e il modello di aggregazione predefiniti dell'oggetto.
IDispatchImpl fornisce un'implementazione predefinita della
IDispatch Interface
parte di qualsiasi interfaccia duale nell'oggetto.ISupportErrorInfoImpl implementa l'interfaccia
ISupportErrorInfo
che garantisce che le informazioni sugli errori possano essere propagate correttamente nella catena di chiamate.
In questa sezione
Implementazione di CComObjectRootEx
Mostra le voci della mappa COM di esempio per l'implementazione CComObjectRootEx
di .
Implementazione di CComObject, CComAggObjec e CComPolyObject
Viene illustrato come le macro DECLARE_*_AGGREGATABLE influiscono sull'uso di CComObject
, CComAggObject
e CComPolyObject
.
Supporto di IDispatch e IErrorInfo
Elenca le classi di implementazione ATL da usare per supportare le IDispatch
interfacce e IErrorInfo
.
Supporto di IDispEventImpl
Vengono illustrati i passaggi per implementare un punto di connessione per la classe.
Modifica della class factory e del modello di aggregazione predefiniti
Visualizzare le macro da usare per modificare la class factory predefinita e il modello di aggregazione.
Creazione di un oggetto aggregato
Elenca i passaggi per la creazione di un oggetto aggregato.
Sezioni correlate
Creazione di un progetto ATL
Fornisce informazioni sulla creazione di un oggetto COM ATL.
ATL
Fornisce collegamenti ad argomenti concettuali sulla programmazione con Active Template Library.