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.

Diagramma delle classi e delle interfacce usate per definire un oggetto A L.

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:

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 CComObjectRootExdi .

Implementazione di CComObject, CComAggObjec e CComPolyObject
Viene illustrato come le macro DECLARE_*_AGGREGATABLE influiscono sull'uso di CComObject, CComAggObjecte 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.

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.

Vedi anche

Concetti