Ejemplo ACDUAL: agrega interfaces duales a una aplicación de automatización

Actualización: noviembre 2007

ACDual muestra cómo agregar compatibilidad con una interfaz dual a una aplicación de automatización (antes automatización OLE) basada en MFC. La solución consta de los proyectos siguientes:

  • ACDualDriv, que contiene una versión del proyecto cliente de automatización AUTODRIV, donde puede seleccionar si desea controlar la aplicación de servidor utilizando la interfaz de envío o enlaces de tabla vtable.

  • ACDual, que contiene una versión real del proyecto de servidor de automatización AUTOCLIK con compatibilidad con una interfaz dual.

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

Para generar el ejemplo ACDual

  1. Abra la solución acdual.sln, que se encuentra en el directorio acdual.

  2. En el menú Generar, haga clic en Generar.

  3. Ejecute ACDual una vez como aplicación independiente para que se registre en el sistema.

Ejecutar el ejemplo

Una vez registrada la aplicación ACDual, puede ejecutar la aplicación ACDualDriv. Si genera la solución en el entorno IDE, el registro de ACDualDriv se hará automáticamente antes de ejecutar ACDualDriv. ACDualDriv inicia la aplicación ACDual y crea un objeto Document, que puede manipular al utilizar Automatización a través de la interfaz de usuario ACDualDriv. También contiene una casilla adicional que le permite seleccionar si desea utilizar enlaces VTBL para comunicarse con el objeto Document de ACDual.

El servidor ACDual utiliza AUTOCLIK como punto de inicio. Se han generado nuevos GUID (identificadores únicos globales) para evitar la confusión con el ejemplo AUTOCLIK original, y se han cambiado algunas cadenas de recursos para clarificar si se está ejecutando el servidor ACDual. Los demás cambios realizados en los códigos fuente están marcados con bloques de comentarios como éste:

      // DUAL_SUPPORT_START
      ... modified code goes here
      // DUAL_SUPPORT_END

Para obtener más información sobre interfaces duales, secuencias de comandos ODL (lenguaje de descripción de objetos) e interfaces de error de automatización, vea la Nota técnica 65.

Interfaces duales

Una interfaz dual permite implementar una interfaz IDispatch o VTBL. Se recomienda utilizar una interfaz dual para todos los objetos de automatización expuestos. Para conocer aspectos que se deben tener en cuenta a la hora de implementar una interfaz dual, vea la Nota técnica 65 e incluya:

  • Implementación de compatibilidad con una interfaz dual para clases basadas en CCmdTarget.

  • Análisis de punteros de interfaz dual.

  • Habilitación de enlaces de seguridad de tipos, incluidos:

    • Registro del tipo de biblioteca de la aplicación.

    • Modificación de los valores de generación del proyecto para acomodar los cambios de biblioteca de tipos.

    • Especificación del nombre de clase correcto del objeto en una biblioteca de tipos.

  • Control de excepciones y de la interfaz de errores de automatización.

Para obtener más información, vea los temas de ActiveX Overview of Automation, Interfaces duales, Automation Type Description Interfaces, y la entrada sobre ODL del atributo dual.

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.

Palabras clave

El ejemplo ACDual muestra el uso de las siguientes palabras clave:

AfxMessageBox; AfxOleInit; AfxOleLockApp; AfxOleUnlockApp; CCmdTarget::EnableAutomation; CCmdTarget::FromIDispatch; CCmdTarget::GetIDispatch; CCmdTarget::OnFinalRelease; CControlBar::EnableDocking; CControlBar::GetBarStyle; CControlBar::SetBarStyle; CDialog::DoModal; CDocument::GetFirstViewPosition; CDocument::GetNextView; CDocument::OnNewDocument; CDocument::SetModifiedFlag; CDocument::UpdateAllViews; CFrameWnd::ActivateFrame; CFrameWnd::DockControlBar; CFrameWnd::EnableDocking; CFrameWnd::LoadFrame; CObject::AssertValid; CObject::Dump; CObject::IsKindOf; CObject::Serialize; COleTemplateServer::ConnectTemplate; COleTemplateServer::UpdateRegistry; CStatusBar::Create; CStatusBar::SetIndicators; CToolBar::Create; CView::DoPreparePrinting; CView::GetDocument; CView::OnBeginPrinting; CView::OnDraw; CView::OnEndPrinting; CView::OnPreparePrinting; CWinApp::AddDocTemplate; CWinApp::EnableShellOpen; CWinApp::InitInstance; CWinApp::LoadStdProfileSettings; CWinApp::RegisterShellFileTypes; CWnd::DoDataExchange; CWnd::GetParentFrame; CWnd::OnCreate; CWnd::OnLButtonDown; CWnd::PreCreateWindow; CWnd::ShowWindow; CWnd::UpdateWindow; DragAcceptFiles; ShowWindow; TextOut

El ejemplo ACDualDriv muestra el uso de las siguientes palabras clave:

AfxGetApp; AfxMessageBox; AfxOleInit; CDC::DrawIcon; CDC::GetSafeHdc; CDialog::DoModal; CDialog::EndDialog; COleDispatchDriver::AttachDispatch; COleDispatchDriver::GetProperty; COleDispatchDriver::InvokeHelper; COleDispatchDriver::SetProperty; CRect::Height; CRect::Width; CWinApp::InitInstance; CWinApp::LoadStdProfileSettings; CWnd::DoDataExchange; CWnd::GetClientRect; CWnd::IsIconic; CWnd::OnClose; CWnd::OnCreate; CWnd::OnPaint; CWnd::OnQueryDragIcon; CWnd::SendMessage; CWnd::ShowWindow; CWnd::UpdateData; GetSystemMetrics; LoadIcon; ShowWindow

Vea también

Otros recursos

Ejemplos de MFC