Agregar puntos de conexión a un objeto
En el Tutorial de ATL se muestra cómo crear un control con compatibilidad con puntos de conexión, cómo agregar eventos y, a continuación, cómo implementar el punto de conexión. ATL implementa puntos de conexión con la clase IConnectionPointImpl .
Para implementar un punto de conexión, tiene dos opciones:
Implemente su propio origen de eventos salientes agregando un punto de conexión al control o objeto.
Reutilizar una interfaz de punto de conexión definida en otra biblioteca de tipos.
En cualquier caso, el Asistente para implementar puntos de conexión usa una biblioteca de tipos para realizar su trabajo.
Agregar un punto de conexión a un control o objeto
Defina una interfaz dispinterface en el bloque de biblioteca del archivo .idl. Si ha habilitado la compatibilidad con puntos de conexión al crear el control con el Asistente para controles ATL, ya se creará la interfaz dispinterface. Si no habilitó la compatibilidad con los puntos de conexión al crear el control, debe agregar manualmente una interfaz dispinterface al archivo .idl. A continuación se muestra un ejemplo de dispinterface. No es necesario que las interfaces salientes sean interfaces de envío, pero muchos lenguajes de scripting como VBScript y JScript requieren esto, por lo que en este ejemplo se usan dos dispinterfaces:
[ uuid(3233E37D-BCC0-4871-B277-48AE6B61224A), helpstring("Buddy Events") ] dispinterface DBuddyEvents { properties: methods: };
Use la utilidad uuidgen.exe o guidgen.exe para generar un GUID.
Agregue el dispinterface como interfaz
[default,source]
en la coclase del objeto en el archivo .idl del proyecto. De nuevo, si ha habilitado la compatibilidad con puntos de conexión al crear el control, el Asistente para controles ATL creará la[default,source
] entrada. Para agregar manualmente esta entrada, agregue la línea en negrita:coclass Buddy { [default] interface IBuddy; [default,source] dispinterface DBuddyEvents; };
Consulte el archivo .idl en el ejemplo Circ de ATL para obtener un ejemplo.
Use la vista de clases para agregar métodos y propiedades a la interfaz de eventos. Haga clic con el botón derecho en la clase en la Vista de clases, seleccione Agregar en el menú contextual y haga clic en Agregar punto de conexión.
En el cuadro de lista Interfaces de origen del Asistente para implementar punto de conexión, seleccione Interfaces del proyecto. Si elige una interfaz para el control y presiona Aceptar, hará lo siguiente:
Genere un archivo de encabezado con una clase de proxy de evento que implemente el código que realizará las llamadas salientes para el evento.
Agregue una entrada al mapa del punto de conexión.
También verá una lista de todas las bibliotecas de tipos en el equipo. Solo debe usar una de estas otras bibliotecas de tipos para definir el punto de conexión si desea implementar la misma interfaz saliente que se encuentra en otra biblioteca de tipos.
Reutilizar una interfaz de punto de conexión definida en otra biblioteca de tipos.
En la Vista de clases, haga clic con el botón derecho en una clase que implemente una macro de BEGIN_COM_MAP , seleccione Agregar en el menú contextual y haga clic en Agregar punto de conexión.
En el Asistente para implementar punto de conexión, seleccione una biblioteca de tipos y una interfaz en la biblioteca de tipos y haga clic en Agregar.
Edite el archivo .idl en:
Copie el dispinterface del archivo .idl del objeto cuyo origen de eventos se está usando.
Use la instrucción importlib en esa biblioteca de tipos.