Ejemplo de atributos ATLDuck: utiliza puntos de conexión con ATL

Actualización: noviembre 2007

El ejemplo de atributos ATLDuck consta de dos proyectos: atlduck y duck. El proyecto duck crea una instancia de un objeto que implementa la interfaz IDuckInt . Esta interfaz incluye cuatro funciones miembro: Flap, Paddle, Quack y Walk.

El segundo proyecto, atlduck, dispone de un punto de conexión para la interfaz IDuckInt (es decir, sabe cómo utilizar la interfaz pero no la implementa). Sólo se crea una única instancia de este objeto. Una vez establecida la conexión entre las dos aplicaciones, atlduck llama a las funciones de la interfaz IDuckInt para los receptores que han llamado a IConnectionPoint::Advise.

El ejemplo ATLDuck realiza una demostración de varios atributos IDL, COM y del compilador, entre los que se incluyen aggregatable, event_source y event_receiver. Para hacer que la clase DuckInt no se pueda agregar, se debe especificar el atributo aggregratable("never"). La clase DuckDoer se configura como un event_source de com, y la clase DuckInt como un event_receiver de com, sin layout dependent=true.

El ejemplo ATLDuck constituye la versión sin atributos de este ejemplo.

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 este ejemplo

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

  2. En el menú Generar, haga clic en Generar solución. Esto generará ambos proyectos y llevará a cabo el registro necesario. Se crearán los siguientes archivos:

    • atlduck.exe, un servidor EXE

    • duck.exe, un cliente EXE

Para ejecutar este ejemplo

  1. En el menú Depurar, haga clic en Iniciar sin depurar. Esto iniciará el servidor atlduck y una instancia del cliente duck. Para ejecutar más de un cliente, navegue hasta el directorio donde se encuentra duck.exe y ejecútelo manualmente desde la línea de comandos.

  2. Aparecerá un cuadro de diálogo. En el cuadro de diálogo, haga clic en el botón Create DoDuck Object (Crear objeto DoDuck). Tras hacer clic en este botón, la aplicación ejecuta atlduck y crea una instancia de un objeto ID CLSID_DuckDoer.

  3. Aparece un nuevo cuadro de diálogo, creado por atlduck.exe. Este cuadro de diálogo muestra un botón para cada una de las funciones de la interfaz IDuckInt, así como un cuadro de lista con todas las conexiones con receptores activos y sus cookies. En los cuadros de diálogo de duck, puede informar (Advise) o no informar (Unadvise) del punto de conexión. Según su elección, recibirá o no notificaciones de los orígenes de datos. La notificación, cuando la reciba, aparecerá en el campo de edición de estado. Además, ATLDuck muestra el valor de la "cookie" suministrada por el punto de conexión cuando se elige informar de la conexión.

Atributos

En este ejemplo se utilizan los atributos siguientes:

  • ATLDuck   aggregatable, coclass, dispinterface, event_source, exe, helpstring, id, module, name, progid, uuid, vi_progid

  • ATLDuck/Duck   aggregatable, coclass, default, dispinterface, event_receiver, exe, helpstring, id, iid_is, in, module, name, object, out, progid, unique, uuid, version, vi_progid

Clases y palabras clave

El ejemplo utiliza las siguientes clases:

CDialog (MFC), CComObject (ATL), IConnectionPointImpl<CDuckDoer> (ATL)

En este ejemplo se utilizan las siguientes palabras clave:

_ASSERTE; _tcslen; _VERIFY; AddRef; Advise; BEGIN_COM_MAP; BEGIN_CONNECTION_POINT_MAP; BEGIN_MSG_MAP; BEGIN_OBJECT_MAP; CComCoClass; CComModule::Unlock; CComObjectRootEx; CDialogImpl; CenterWindow; CoInitialize; COM_INTERFACE_ENTRY; COM_INTERFACE_ENTRY_IMPL; COMMAND_HANDLER; COMMAND_ID_HANDLER; CONNECTION_POINT_ENTRY; CoSuspendClassObjects; CoUninitialize; Create; DECLARE_CLASSFACTORY_SINGLETON; DECLARE_NOT_AGGREGATABLE; DECLARE_REGISTRY_RESOURCEID; DestroyWindow; DispatchMessage; EnableWindow; END_COM_MAP; END_CONNECTION_POINT_MAP; END_MSG_MAP; END_OBJECT_MAP; ExitProcess; FindConnectionPoint; GetCommandLine; GetDC; GetDlgItem; GetMessage; GetTextExtentPoint32; IConnectionPointContainerImpl; IConnectionPointImpl; Init; IsWindowVisible; MESSAGE_HANDLER; MessageBox; OBJECT_ENTRY; OleInitializeCoCreateInstance; OnCancel; OnFlap; OnInitDialog; OnOK; OnPaddle; OnWalk OnQuack; PostThreadMessage; QueryInterface; RecalcListboxExtent; RegisterClassObjects; RegisterServer; reinterpret_cast; ReleaseDC; RevokeClassObjects; SendMessage; SetOwner; SetWindowText; ShowStatus; ShowWindow; Unadvise; UnregisterServer; UNUSED_ALWAYS; UpdateRegistryFromResource; UpdateWindow; USES_CONVERSION

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