Apoyo IDispEventImpl

La clase de plantilla IDispEventImpl puede utilizarse para proporcionar soporte para puntos de conexión en el objeto COM de ATL. Un punto de conexión permite que el objeto COM controlar los eventos disparados desde objetos COM externos. Estos puntos de conexión se asignan con un mapa de receptores de eventos, proporcionado por el objeto COM.

Para implementar correctamente un punto de conexión o para el objeto COM, deben completar los siguientes pasos:

En este procedimiento, que modificando sólo el archivo de encabezado (. h) de la clase COM.

Importación de las bibliotecas de tipos

Para cada objeto externo cuyos eventos desea manejar, debe importar la biblioteca de tipos. Este paso define los eventos que pueden ser manejados y proporciona información que se utiliza cuando se declara el mapa de receptores de eventos. La directiva # Import puede utilizarse para lograrlo. Agregue las líneas de la Directiva de necesario # Import para cada interfaz de envío que apoyará para el archivo de encabezado (. h) de la clase COM.

En el ejemplo siguiente se importa a la biblioteca de tipos de un servidor COM externo ( MyServer ):

 # Import "D:\MyServer.dll" raw_interfaces_only, no_namespace, named_guids

&Notanbsp;  Debe tener una declaración separada # Import para cada interfaz de envío externo que apoyará.

Declarar las Interfaces IDispEventImpl

Ahora que han importado las bibliotecas de tipos de cada interfaz de envío, debe declarar interfaces IDispEventImpl independientes para cada interfaz de envío externo. Modificar la declaración de la clase COM agregando una declaración de interfaz IDispEventImpl para cada objeto externo. Para obtener más información sobre los parámetros, vea IDispEventImpl.

Las siguientes líneas de código declaran dos puntos de conexión, de la costumbre IExtEvents1 y IExtEvents2 interfaces para el objeto COM implementada por claseCMyObj:

pública IDispEventImpllt; 0, CMyObj & DIID__IExtEvents1,
    & LIBID_EXTEVENTS1Lib, 1, 0 >,
IDispEventImpl público < 1, CMyObj & DIID__IExtEvents2,
    & LIBID_EXTEVENTS2Lib, 1, 0 & gt

Declarar un mapa de receptores de eventos

Para que las notificaciones de eventos a ser manipulados por el correcto funcionamiento, el objeto COM debe ruta cada evento a su controlador correcto. Esto se logra mediante la declaración de un mapa de receptores de eventos.

ATL proporciona varias macros, BEGIN_SINK_MAP, END_SINK_MAPy SINK_ENTRY, que facilitan esta asignación. El formato estándar es la siguiente:

BEGI&N_SINK_MAP(comClass)
 nbsp; SINK_ENTRY (id, dispid, func)
... las entradas de eventos externos de //additional
END_SINK_MAP()

En el siguiente ejemplo declara un mapa de receptores de eventos con dos controladores de eventos:

BEGIN_SINK_MAP(CMyObj)
   SINK_ENTRY (0, Events1, OnClick1)
   SINK_ENTRY (0, Events2, OnClick2)
END_SINK_MAP()

La aplicación está casi completa. El último paso refiere al asesoramiento y desaconsejar las interfaces externas.

Asesoramiento y Unadvising las Interfaces IDispEventImpl

El paso final consiste en implementar un método que será asesorar (o objeto) todos los puntos de conexión en el momento adecuado. Este asesoramiento debe hacerse antes de la comunicación entre los clientes externos y su objeto. Antes de que el objeto se hace visible, cada interfaz de envío externo compatible con su objeto es consultado para interfaces salientes. Se establece una conexión y una referencia a la interfaz de salida se utiliza para controlar los eventos del control. Este procedimiento se conoce como "asesoramiento".

Una vez finalizada su objeto con las interfaces externas, las interfaces salientes deben notificarse que ya no son utilizados por el objeto COM. Este proceso se conoce como "unadvising".

Debido a la naturaleza única de objetos COM, este procedimiento puede variar, en detalle y ejecución, entre implementaciones. Estos detalles son más allá del alcance de este tema y no se abordan.

Index