Ejemplo de atributos DispSink: controla eventos desencadenados desde un servidor COM Singleton a través de una interfaz de envío
Actualización: noviembre 2007
El ejemplo de atributos DispSink muestra el uso de un objeto de servidor singleton (un objeto que puede tener una sola instancia) que posee su propia interfaz dual y una interfaz de envío empleada para activar eventos.
El ejemplo DispSink constituye la versión sin atributos de este ejemplo.
Nota: |
---|
Algunos ejemplos, como éste, no se han modificado para reflejar los cambios en los asistentes, las bibliotecas y el compilador de Visual C++, pero, aun así, muestran cómo realizar la tarea deseada. |
Nota de seguridad: |
---|
Este código de ejemplo se proporciona para ilustrar un concepto y no debe utilizarse en aplicaciones o sitios Web, ya que quizás no ilustre las prácticas de codificación más seguras. Microsoft no asume ninguna responsabilidad por daños incidentales o consecuentes en caso de que el código de ejemplo se utilice para propósitos distintos de aquellos para los que se concibió. |
Para obtener ejemplos e instrucciones para su instalación:
En el menú Ayuda de Visual Studio, haga clic en Ejemplos.
Para obtener más información, vea Localizar archivos de ejemplo.
La lista de ejemplos completa con la versión más reciente está disponible en línea en la página Visual Studio 2008 Samples.
También encontrará ejemplos en el disco duro de su equipo. De manera predeterminada, los ejemplos y el archivo Léame se copian en una carpeta bajo \Archivos de programa\Visual Studio 9.0\Samples\. Para las versiones Express de Visual Studio, todos los ejemplos están en línea.
Generar y ejecutar el ejemplo
Para generar y ejecutar este ejemplo
Abra el archivo de solución DispSink.sln.
En el menú Generar, haga clic en Generar solución.
Abra dos o más instancias de ActiveX Control Test Container e inserte el control cliente, DispCtl, en cada instancia. Vea Probar propiedades y eventos con Test Container para obtener información sobre cómo tener acceso a Test Container.
Llame al método Connect para todos los controles.
Llame al método Send para uno de los controles. Cambie el campo Tipo de parámetro del cuadro de diálogo Invocar métodos al valor VT_BSTR y, a continuación, escriba cualquier cadena en el cuadro Valor del parámetro. Haga clic en el botón Invoke. La cadena se mostrará en el centro de todos los controles conectados.
Llame al método Disconnect para todos los controles antes de eliminarlos.
Cómo funciona el ejemplo
El servidor es un objeto singleton que cuenta con su propia interfaz dual así como con una interfaz de envío empleada para activar eventos. La interfaz de envío se coloca en el archivo .idl mediante el atributo dispinterface. El objeto de servidor recibe los datos por medio del método Send de su interfaz dual, y los transmite a todos los componentes conectados a través del evento Transfer en su interfaz de envío. El Dispserver utiliza el atributo event_source, mientras que el Dispclient utiliza el atributo event_receiver.
El cliente es un control ActiveX que contiene un objeto de servidor. El control responde al evento Transfer activado por el objeto de servidor. Dispone de una interfaz dual con métodos Connect, Send y Disconnect. Si se activa el evento Transfer con una variante que contiene un valor BSTR, la cadena se muestra en el centro del control.
Atributos
En este ejemplo se utilizan los atributos siguientes:
DISPSINK/DispClient coclass, dual, event_receiver, helpstring, id, module, object, pointer_default, registration_script, threading, uuid, version, vi_progid
DISPSINK/DispServer coclass, default, dispinterface, dual, event_source, helpstring, id, module, object, pointer_default, threading, uuid, vi_progid
Palabras clave
En este ejemplo se utilizan las siguientes palabras clave:
#import; CComAutoThreadModule; CComSimpleThreadAllocator; CoCreateInstance; DECLARE_CLASSFACTORY_AUTO_THREAD; FireViewChange