Fundamentos de objetos COM de ATL
La ilustración siguiente muestra la relación entre las clases e interfaces que se usan para definir un objeto COM ATL.
[!NOTA]
Este diagrama muestra que CComObject se deriva de CYourClass mientras CComAggObject y CComPolyObject incluyen CYourClass como variable miembro.
Hay tres formas de definir un objeto COM ATL.La opción estándar es utilizar la clase de CComObject que se deriva de CYourClass.La segunda opción es crear un objeto agregado utilizando la clase de CComAggObject .La tercera opción es utilizar la clase de CComPolyObject .CComPolyObject actúa como híbrido: puede funcionar como una clase de CComObject o como una clase de CComAggObject , dependiendo de cómo se crea por primera vez.Para obtener más información sobre cómo usar la clase CComPolyObject, vea Clase de CComPolyObject.
Cuando se utiliza el estándar ATL COM, se utilizan dos objetos: un objeto externo y un objeto interno.Los clientes externos tienen acceso a la funcionalidad del objeto interno con funciones de contenedor que se definen en el objeto externo.El objeto externo es de CComObjectescrito.
Si se utiliza un objeto agregado, el objeto externo no proporciona contenedores para la funcionalidad del objeto interno.En su lugar, el objeto externo proporciona un puntero que se tiene acceso directamente por los clientes externos.En este escenario, el objeto externo es de CComAggObjectescrito.El objeto interno es una variable miembro del objeto externo, y es de CYourClassescrito.
Dado que el cliente no tiene que pasar por el objeto externo interactuar con el objeto interno, los objetos agregados suelen ser más eficaces.Además, el objeto externo no tiene que conocer la funcionalidad del objeto agregado, puesto que la interfaz del objeto agregado es directamente disponibles al cliente.Sin embargo, no todos los objetos se pueden agregar.Para que un objeto sea agregado, necesita diseñar con la agregación en mente.
ATL implementa IUnknown en dos fases:
Herramientas deCComObject, de CComAggObject, o de CComPolyObject los métodos de IUnknown .
CComObjectRoot o CComObjectRootEx administra el recuento de referencias y los punteros externos de IUnknown.
Otros aspectos del objeto ATL COM son controlados por otras clases:
CComCoClass define el modelo predeterminado de generador y la agregación de la clase del objeto.
IDispatchImpl proporciona una implementación predeterminada de la parte de IDispatch Interface de cualquier interfaz dual en el objeto.
ISupportErrorInfoImpl implementa la interfaz de ISupportErrorInfo que garantiza la información de error puede propagar por la cadena de llamadas correctamente.
En esta sección
implementar CComObjectRootEx
Muestra las entradas del mapa COM de ejemplo para implementar CComObjectRootEx.implementar CComObject, CComAggObject, y CComPolyObject
Describe cómo las macros de DECLARE_*_AGGREGATABLE afectan al uso de CComObject, de CComAggObject, y de CComPolyObject.admitir IDispatch e IErrorInfo
Muestra las clases de implementación de ATL para utilizar para admitir IDispatch y las interfaces de IErrorInfo .admitir IDispEventImpl
Describe los pasos para implementar un punto de conexión para la clase.Cambiar el modelo predeterminado del generador y de agregación de clases
Presentación qué macros a utilizar para cambiar el generador y la agregación predeterminada de la clase modelo.crear un objeto agregado
Muestra los pasos para crear un objeto agregado.
Secciones relacionadas
Crear un proyecto ATL
Proporciona información sobre cómo crear un objeto COM ATL.ATL
Proporciona vínculos a temas conceptuales sobre cómo programar utilizando Active Template Library.