Compartir a través de


Ejemplo de atributos CONNECT: muestra la implementación y utilización de puntos de conexión

Actualización: noviembre 2007

El ejemplo de atributos CONNECT ilustra la implementación y el uso de los puntos de conexión (las interfaces IConnectionPointContainer y IConnectionPoint) en un entorno de subprocesamiento múltiple.

El ejemplo realiza una demostración de varios atributos IDL, COM y del compilador habituales, entre los que se incluyen support_errorinfo, event_source y event_receiver.

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

  1. Abra el archivo de solución connect.sln.

  2. En el menú Generar, haga clic en Generar solución.

  3. Seleccione el cliente que desea ejecutar, Drive o MDrive, y establézcalo como proyecto de inicio (haga clic con el botón secundario del mouse en la carpeta del proyecto y elija Establecer como proyecto de inicio). Encontrará más información sobre los clientes en la sección Cómo funciona el ejemplo.

  4. En el menú Depurar, haga clic en Iniciar sin depurar.

Cómo funciona el ejemplo

El servidor está implementado en Connect.dll. Esta DLL permite la creación de un objeto COM CoRandom, implementado mediante la clase CRandom de C++. El objeto COM admite IRandom (una interfaz dual) e IConnectionPointContainer, y acepta conexiones para la interfaz IRandomEvent.

La interfaz IRandom admite los métodos siguientes:

  • Start— inicia un subproceso dentro del objeto

  • Stop: detiene un subproceso dentro del objeto

  • StopAll: detiene todos los subprocesos en ejecución

Al ejecutarse, los subprocesos secundarios del objeto siguen desencadenando eventos a través del punto de conexión.

Se proporcionan dos clientes: Drive y MDrive. Pueden encontrarse en los subdirectorios Drive y MDrive.

  • Drive.exe es una aplicación de consola sencilla que proporciona un único objeto que implementa la interfaz IRandomEvent. Crea un objeto CoRandom , llama a Advise y Unadvise en el punto de conexión y hace que el objeto CoRandom desencadene eventos en el objeto Drive.

  • Mdrive.exe es una aplicación basada en un cuadro de diálogo MFC, que puede crear varios receptores de notificaciones y controlar el número de subprocesos que crea el servidor. Cuando ejecute Mdrive.exe, haga clic en el botón Inicio al menos una vez y después haga clic en el botón Advise varias veces. Cada clic en el botón Advise agrega un punto de conexión, lo que hace que la presentación en pantalla sea más ancha. Si no hace clic en el botón Advise, no verá ninguna actividad en la pantalla.

Atributos

En este ejemplo se utilizan los atributos siguientes:

  • Connect   coclass, default, dll, dual, event_source, helpstring, id, in, module, name, object, out, pointer_default, progid, support_error_info, uuid, vi_progid

  • Connect/drive   event_receiver, module

Palabras clave

En este ejemplo se utilizan las siguientes palabras clave:

AfxGetApp; AfxMessageBox; AtlAdvise; ATLASSERT; AtlUnadvise; BEGIN_COM_MAP; BEGIN_CONNECTION_POINT_MAP; BEGIN_MESSAGE_MAP; BEGIN_OBJECT_MAP; CComCoClass; CComModule::GetClassObject; CComModule::GetLockCount; CComModule::Init; CComModule::RegisterServer; CComModule::Term; CComModule::UnregisterServer; CComObject::CreateInstance; CComObjectRoot; CDialog::OnCancel; CDialog::OnOK; CloseHandle; CoCreateInstance; COleTemplateServer::RegisterAll; COM_INTERFACE_ENTRY; COM_INTERFACE_ENTRY_IMPL; COM_INTERFACE_ENTRY2; CONNECTION_POINT_ENTRY; CoUninitialize; CreateEvent; CreateThread; DECLARE_REGISTRY_RESOURCEID; DisableThreadLibraryCalls; DoModal; DrawIcon; END_COM_MAP; END_CONNECTION_POINT_MAP; END_MESSAGE_MAP; END_OBJECT_MAP; GdiFlush; GetClientRect; GetDlgItem; GetTickCount; GetUnknown; IConnectionPointContainerImpl; IConnectionPointImpl; IDispatchImpl; ISupportErrorInfo; LoadIcon; Lock; memset; OBJECT_ENTRY; ON_COMMAND; puts; ReleaseDC; SendMessage; SetEvent; SetIcon; SetPixel; Sleep; Unadvise; Unlock; WaitForSingleObject

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.

Vea también

Otros recursos

Ejemplos de atributos ATL