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.

Diagram of the classes and interfaces used to define an A T L object.

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:

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, CComAggObjecty 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.

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.

Consulte también

Conceptos