Ejemplo ATLDuck: utiliza puntos de conexión con ATL

Actualización: noviembre 2007

El ejemplo ATLDuck consta de cuatro proyectos: atlduck, duck y sus respectivos proyectos de código auxiliar o proxy, atlduckPS y duckPS. 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.

Este ejemplo también utiliza el código de cálculo de referencias (marshaling), a través de atlduckPS y duckPS, necesario para conectar interfaces en diferentes procesos.

El ejemplo de atributos ATLDuck constituye la versión con 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á los cuatro proyectos y llevará a cabo el registro necesario. Se crearán los siguientes archivos:

    • atlduck.exe, un servidor EXE

    • atlduckPS.dll, una DLL de marshalling para el servidor atlduck.exe

    • duck.exe, un cliente EXE

    • duckPS.dll, una DLL de marshalling DLL para el cliente duck.exe

Para ejecutar este ejemplo

  1. Inicie una o varias instancias de duck.exe.

    Nota:

    Si abre varias instancias de duck.exe apreciará los puntos de conexión claramente.

  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 IDuckIn, 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.

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

Vea también

Otros recursos

Ejemplos de ATL