Cómo crear un proyecto de automatización mediante MFC y una biblioteca de tipos

Resumen

Este artículo ilustra, en detalle, cómo automatizar la integración de componentes con aplicaciones compatibles con COM, como las aplicaciones de Microsoft Office.

Más información

La sección siguiente muestra cómo puede crear un proyecto MFC. El ejemplo automatiza Microsoft Excel. Puede utilizar los primeros 8 pasos para cualquier proyecto y modificar los pasos del 9 al 15 cuando trabaje con otra aplicación.

Crear un proyecto de automatización

  1. Con Microsoft Developer Studio, inicie un nuevo proyecto "MFC AppWizard (exe)" denominado "AutoProject".
  2. En el paso 1 de MFC AppWizard, elija "Dialog Based" para el tipo de aplicación y, a continuación, haga clic en Finalizar.

    El cuadro de diálogo nueva información de proyecto aparece y se indica que las clases que se crearán incluyen:
          Application: CAutoProjectApp in AutoProject.h and AutoProject.cpp      Dialog: CAutoProjectDlg in AutoProject.h and AutoProjectDlg.cpp

    Haga clic en Aceptar para crear el proyecto.
  3. El cuadro de diálogo "IDD_AUTOPROJECT_DIALOG" se abre en el área de diseño y edición de Visual Studio. Puede modificarla según las instrucciones de los dos pasos siguientes.
  4. Quite el control de etiqueta (IDC_STATIC) y el botón Cancelar (IDCANCEL).
  5. Cambie el nombre del botón Aceptar a "IDRUN" y el título a "Ejecutar". Cierre el formulario de diseño del cuadro de diálogo AutoProject.rc.
  6. Haga clic en ClassWizard en el menú Ver (o presione CTRL+W).
  7. Seleccione la ficha mapas de mensajes seleccione IDRUN en el cuadro de lista de identificadores de objeto y seleccione "BN_CLICKED" en el cuadro de lista mensajes. Haga clic en Agregar función y acepte el nombre de función "OnRun". Haga clic en Aceptar para cerrar ClassWizard.


    Nota: Este paso agrega una declaración para la función miembro "OnRun()" en el encabezado del archivo denominado AutoProjectDLG.h. Este paso también agrega una vacía la función de controlador de mensajes esqueleto denominada CAutoProjectDlg al archivo denominado AutoProjectDLG.cpp.
  8. Haga clic en ClassWizard en el menú Ver (o presione CTRL+W).
  9. Seleccione la ficha automatización haga clic en Agregar clase y elija "desde"una biblioteca de tipos. Desplácese para seleccionar la biblioteca de objetos de la aplicación que desea automatizar (para este ejemplo, si está automatizando Excel 97, seleccione la biblioteca de objetos de Microsoft Excel 8.0; la ubicación predeterminada es C:\Program programa\Microsoft Office\Office\Excel8.olb).

    Si está automatizando Microsoft Excel 2000, seleccione Microsoft Excel 9.0 Object Library para que la ubicación predeterminada es C:\Program de programa\Microsoft Office\Office\Excel9.olb.


    Si está automatizando Microsoft Excel 2002 y Microsoft Office Excel 2003, la biblioteca de objetos está incrustada en el archivo Excel.exe. La ubicación predeterminada para Excel.exe en Office 2002 es C:\program Files\Microsoft Office\Office10\Excel.exe. La ubicación predeterminada para Excel.exe en Office 2003 es C:\program Files\Microsoft Office\Office11\Excel.exe. Una vez haya seleccionado la biblioteca de objetos adecuada, haga clic en Abrir. Seleccione todas las clases de la lista Confirmar clases y, a continuación, haga clic en Aceptar.

    Nota: El cuadro de lista en el cuadro de diálogo Confirmar clases contiene todas las interfaces IDispatch (que son casi idénticas a las clases) en la biblioteca de tipos de Microsoft Excel. En la mitad inferior del cuadro de diálogo verá que un archivo de implementación denominado Excel8.cpp contiene el cuadro clase contenedores generados derivados de ColeDispatchDriver(), y el archivo de encabezado de declaración adecuado se denomina Excel8.h. (Para Excel 2002 y Excel 2003, los archivos se llaman Excel.cpp y Excel.h.)
  10. Haga clic en Aceptar para cerrar el cuadro de diálogo MFC ClassWizard.
  11. Agregue el código siguiente a la función CAutoProjectApp, que carga y habilita la biblioteca de servicios COM:
          BOOL CAutoProjectApp::InitInstance()      {
    if(!AfxOleInit()) // Your addition starts here
    {
    AfxMessageBox("Could not initialize COM dll");
    return FALSE;
    } // End of your addition

    AfxEnableControlContainer();
    .
    .
    .

    }

  12. Agregue la línea siguiente a la #include en la parte superior del archivo de programa AutoProject.cpp:
          #include <afxdisp.h>
  13. Agregue la instrucción de inclusión de excel8.h después de la instrucción include correspondiente a stdafx.h en la parte superior del archivo de programa AutoProjectDlg.cpp:
          #include "stdafx.h"      #include "excel8.h" // excel.h in the case of Excel 2002 and Excel 2003.

  14. Agregue código de automatización a la CAutoProjectDlg para que aparezca como se muestra a continuación:
          void CAutoProjectDlg::OnRun()      {
    _Application app; // app is the Excel _Application object

    // Start Excel and get Application object...
    if(!app.CreateDispatch("Excel.Application"))
    {
    AfxMessageBox("Couldn't start Excel.");
    }
    else
    {
    //Make Excel Visible and display a message
    app.SetVisible(TRUE);
    AfxMessageBox ("Excel is Running!");
    }
    }

  15. Genere y ejecute el proyecto. RESULTADOS: Al hacer clic en el botón ejecutar en el cuadro de diálogo, se iniciará Microsoft Excel. Activar el cuadro de diálogo Auto_Excel y descarte el cuadro de mensaje. Microsoft Excel se cerrará cuando la función CAutoProjectDlg finaliza porque la variable de aplicación se habrá salido del ámbito.

Notas adicionales

Una vez haya agregado las clases de una biblioteca de tipos al proyecto (como se hizo en el paso 9 anterior), observará que se han agregado muchas clases al proyecto. En ClassView, haga doble clic en una clase para ver las funciones miembro de esa clase y, a continuación, haga doble clic en la función miembro para ver la definición de esa función en el archivo de aplicación Excel8.cpp.


Debe ir a la definición de una función miembro si desea comprobar un tipo de valor devuelto o si necesita cambiar la implementación de una función. Cada vez que cambie una definición de función, recuerde cambiar la declaración en el archivo Excel8.h. Al hacerlo, asegúrese de que cambie la declaración de función correcta; a veces, se asigna el mismo nombre a las funciones miembro de múltiples classes--GetApplication() es un ejemplo de ello.

Aunque los pasos anteriores ilustran cómo automatizar Microsoft Excel, puede aplicar las mismas ideas para automatizar otras aplicaciones. La lista siguiente contiene los nombres de archivo de las bibliotecas de tipos de las aplicaciones de Microsoft Office:
   Application                           Type Library   --------------------------------------------------

Microsoft Access 97 Msacc8.olb
Microsoft Jet Database 3.5 DAO350.dll
Microsoft Binder 97 Msbdr8.olb
Microsoft Excel 97 Excel8.olb
Microsoft Graph 97 Graph8.olb
Microsoft Office 97 Mso97.dll
Microsoft Outlook 97 Msoutl97.olb
Microsoft PowerPoint 97 Msppt8.olb

Microsoft Word 97 Msword8.olb
Microsoft Access 2000 Msacc9.olb
Microsoft Jet Database 3.51 DAO360.dll
Microsoft Binder 2000 Msbdr9.olb
Microsoft Excel 2000 Excel9.olb
Microsoft Graph 2000 Graph9.olb
Microsoft Office 2000 Mso9.dll
Microsoft Outlook 2000 Msoutl9.olb
Microsoft PowerPoint 2000 Msppt9.olb
Microsoft Word 2000 Msword9.olb

Microsoft Access 2002 Msacc.olb
Microsoft Excel 2002 Excel.exe
Microsoft Graph 2002 Graph.exe
Microsoft Office 2002 MSO.dll
Microsoft Outlook 2002 MSOutl.olb
Microsoft PowerPoint 2002 MSPpt.olb
Microsoft Word 2002 MSWord.olb

Microsoft Office Access 2003 Msacc.olb
Microsoft Office Excel 2003 Excel.exe
Microsoft Graph 2003 Graph.exe
Microsoft Office 2003 MSO.dll
Microsoft Office Outlook 2003 MSOutl.olb
Microsoft Office PowerPoint 2003 MSPpt.olb
Microsoft Office Word 2003 MSWord.olb

Nota: La ubicación predeterminada de estas bibliotecas de tipos es C:\Program Files\Microsoft Office\Office (para Office 2002 la ruta es C:\...\Office10 y para Office 2003 la ruta es C:\...\Office11), excepto Dao350.dll o Dao360.dll y Microsoft Office 10 (Mso.dll). La ubicación predeterminada de Dao350.dll/Dao360.dll es C:\Program Files\Common Files\Microsoft Shared\Dao. La ubicación predeterminada para MSO.dll es C:\Program archivos de programa\Archivos comunes\Microsoft Shared\Office10 para Office 2002 y C:\Program archivos de programa\Archivos comunes\Microsoft Shared\Office11 para Office 2003.

Referencias

Este artículo presenta un enfoque concreto para generar un proyecto de cuadro de diálogo. Si desea consultar documentación más general sobre el proceso de generar un proyecto de VC ++ en el entorno Microsoft Developer Studio, existe un excelente tutorial que se puede obtener acceso mediante Visual Studio InfoView. Para tener acceso al tutorial, haga clic en Buscar en el menú Ayuda. Haga clic en la ficha Índice y escriba lo siguiente:
trabajar con proyectos
Haga clic en Mostrar temas. Seleccione el tema "Página de inicio: trabajar con proyectos" y haga clic en mostrar.
Para obtener más información acerca de la automatización de aplicaciones de Office, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:

222101 cómo encontrar y usar la documentación del modelo de objetos de Office

Propiedades

Id. de artículo: 178749 - Última revisión: 23 ene. 2017 - Revisión: 2

Comentarios