Aspectos básicos de los objetos ATL COM
En la ilustración siguiente se muestra la relación entre las clases e interfaces que se usan para definir un objeto COM ATL.
Nota:
En este diagrama se muestra que CComObject
se deriva de CYourClass
mientras CComAggObject
y CComPolyObject
incluyen CYourClass
como una variable miembro.
Hay tres maneras de definir un objeto COM ATL. La opción estándar es usar la clase CComObject
que se deriva de CYourClass
. La segunda opción es crear un objeto agregado mediante la clase CComAggObject
. La tercera opción es usar la clase CComPolyObject
. CComPolyObject
actúa como híbrido: puede funcionar como una clase CComObject
o como una clase CComAggObject
, dependiendo de cómo se cree por primera vez. Para obtener más información sobre cómo usar la clase CComPolyObject
, consulte Clase CComPolyObject.
Cuando se usa COM ATL estándar, se usan dos objetos: un objeto externo y un objeto interno. Los clientes externos acceden a la funcionalidad del objeto interno a través de las funciones contenedoras definidas en el objeto externo. El objeto externo es de tipo CComObject
.
Cuando se usa un objeto agregado, el objeto externo no proporciona contenedores para la funcionalidad del objeto interno. En su lugar, el objeto externo proporciona un puntero al que acceden directamente los clientes externos. En este escenario, el objeto externo es de tipo CComAggObject
. El objeto interno es una variable miembro del objeto externo y es de tipo CYourClass
.
Dado que el cliente no tiene que pasar por el objeto externo para 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, dado que la interfaz del objeto agregado está directamente disponible para el cliente. Sin embargo, no todos los objetos se pueden agregar. Para que se agregue un objeto, debe diseñarse teniendo en cuenta la agregación.
ATL implementa IUnknown en dos fases:
CComObject, CComAggObject o CComPolyObject implementa los métodos
IUnknown
.CComObjectRoot o CComObjectRootEx administra el recuento de referencias y los punteros externos de
IUnknown
.
Otras clases controlan otros aspectos del objeto COM ATL:
CComCoClass define el modelo de agregación y generador de clases predeterminado del objeto.
IDispatchImpl proporciona una implementación predeterminada de la parte
IDispatch Interface
de cualquier interfaz dual en el objeto.ISupportErrorInfoImpl implementa la interfaz
ISupportErrorInfo
que garantiza que la información sobre los errores se propague correctamente por la cadena de llamadas.
En esta sección
Implementar CComObjectRootEx
Muestra entradas de mapa COM de ejemplo para implementar CComObjectRootEx
.
Implementar CComObject, CComAggObject y CComPolyObject
Describe cómo las macros DECLARE_*_AGGREGATABLE afectan el uso de CComObject
, CComAggObject
y CComPolyObject
.
Admitir IDispatch e IErrorInfo
Enumera las clases de implementación ATL que se usarán para admitir las interfaces IDispatch
y IErrorInfo
.
Admitir IDispEventImpl
Describe los pasos para implementar un punto de conexión para la clase.
Cambiar el generador de clases predeterminado y el modelo de agregación
Muestra qué macros usar para cambiar el modelo de agregación y el generador de clases predeterminados.
Crear un objeto agregado
Enumera los pasos para crear un objeto agregado.
Secciones relacionadas
Creación de un proyecto ATL
Proporciona información sobre cómo crear un objeto COM ATL.
ATL
Proporciona vínculos a temas sobre cómo programar utilizando Active Template Library.