templatelt; classecontenute >
classe CComPolyObject: IUnknown pubblici, pubblica CComObjectRootEx <contenute:: _ThreadModel::ThreadModelNoCS >
Parametri
contenute
La classe derivata da CComObjectRoot o CComObjectRootEx, come pure da tutte le altre interfacce si desidera supportare sull'oggetto.
CComPolyObject implementa IUnknown per un oggetto non aggregato o aggregato.
Quando viene creata un'istanza di CComPolyObject , viene controllato il valore dell'ignoto esterno. Se è NULL, viene implementata IUnknown per un oggetto non aggregato. Se l'ignoto esterno non è NULL, verrà implementato l'IUnknown per un oggetto aggregato.
Il vantaggio di usare CComPolyObject è che si evita di avere sia CComAggObject e CComObject nel modulo per gestire i casi aggregati e non aggregati. Un singolo oggetto CComPolyObject gestisce entrambi i casi. Questo significa che solo una copia di vtable e una copia delle funzioni presenti nel modulo. Se tuo vtable è grande, questo può ridurre notevolmente le dimensioni del modulo. Tuttavia, se tuo vtable è piccola, utilizzando CComPolyObject può comportare una dimensione leggermente più grande del modulo perché esso non è ottimizzato per un oggetto non aggregato o aggregato, come sono CComAggObject e CComObject.
Se la macro DECLARE_POLY_AGGREGATABLE viene specificata nella definizione della classe dell'oggetto, CComPolyObject servirà per creare un oggetto. DECLARE_POLY_AGGREGATABLE verrà automaticamente essere dichiarata se si utilizza la creazione guidata oggetto per creare un controllo completo o il controllo di Internet Explorer.
Se aggregate, l'oggetto CComPolyObject ha una propria IUnknown, separato dall' esterno dell'oggetto IUnknowne mantiene il proprio numero di riferimenti. CComPolyObject utilizza CComContainedObject per delegare all'esterno ignoto.
Per ulteriori informazioni sull'aggregazione, vedere l'articolo di Fondamenti di oggetti COM ATL.
# include lt;atlcom.h>
Vedere a&nchenbsp;CComObjectRootEx, DECLARE_POLY_AGGREGATABLE