如何使用 MFC 和类型库创建自动化项目

本文已归档。它按“原样”提供,并且不再更新。
概要
本文详细说明如何使组件与 COM 兼容应用程序(如 Microsoft Office 应用程序)的集成自动执行。
更多信息
下面一节说明如何创建 MFC 项目。该示例使 Microsoft Excel 自动运行。您可以将前 8 个步骤用于任何项目,在使用其他应用程序时可修改步骤 9 至步骤 15。

创建自动化项目

  1. 在 Microsoft Developer Studio 中,启动一个名为“AutoProject”的新“MFC AppWizard (exe)”项目。
  2. 在 MFC AppWizard 的步骤 1 中,为应用程序类型选择“对话框基于”,然后单击“完成”。

    出现“新项目信息”对话框,指示要创建的类包括:
          Application: CAutoProjectApp in AutoProject.h and AutoProject.cpp      Dialog: CAutoProjectDlg in AutoProject.h and AutoProjectDlg.cpp						
    单击“确定”创建项目。
  3. “IDD_AUTOPROJECT_DIALOG”对话框在 Visual Studio 的设计/编辑区域打开。按照下面两个步骤中的说明进行修改。
  4. 删除“标签”控件 (IDC_STATIC) 和“取消”按钮 (IDCANCEL)。
  5. 将“确定”按钮的名称更改为“IDRUN”,并将标题更改为“运行”。关闭 AutoProject.rc 对话框设计窗体。
  6. 单击“查看”菜单上的“ClassWizard”(或按 Ctrl+W)。
  7. 选择“消息映射”选项卡。在“对象 ID”列表框中选择“IDRUN”,在“消息”列表框中选择“BN_CLICKED”。单击“添加函数”并接受函数名称“OnRun”。单击“确定”关闭 ClassWizard。

    注意:这一步骤将函数成员“OnRun();”的声明添加到名为 AutoProjectDLG.h 的头文件中,另外还将名为 CAutoProjectDlg::OnRun() 的空主干消息处理函数添加到名为 AutoProjectDLG.cpp 的文件中。
  8. 单击“查看”菜单上的“ClassWizard”(或按 Ctrl+W)。
  9. 选择“自动”选项卡。单击“添加类”,并选择“从类型库”。在目录中浏览,为要自动运行的应用程序选择对象库(在本例中,如果要使 Excel 97 自动运行,请选择 Microsoft Excel 8.0 对象库;默认位置为 C:\Program Files\Microsoft Office\Office\Excel8.olb)。

    如果要使 Microsoft Excel 2000 自动运行,请选择 Microsoft Excel 9.0 对象库,其默认位置为 C:\Program Files\Microsoft Office\Office\Excel9.olb。

    如果要使 Microsoft Excel 2002 和 Microsoft Office Excel 2003 自动运行,则对象库将被嵌入到文件 Excel.exe 中。Office 2002 中的 Excel.exe 文件的默认位置为 C:\Program Files\Microsoft Office\Office10\Excel.exe。Office 2003 中的 Excel.exe 文件的默认位置为 C:\Program Files\Microsoft Office\Office11\Excel.exe。在选择了相应的对象库后,请单击“打开”。在“确认类”列表中选择所有类,然后单击“确定”。

    注意:“确认类”对话框中的列表框包含 Microsoft Excel 类型库中的所有 IDispatch 接口(它们与类几乎完全一样)。在该对话框的下半部分,您将看到一个名为 Excel8.cpp 的实现文件,它包含由 ColeDispatchDriver() 派生的已生成的类包装,而相应的声明头文件名为 Excel8.h。(在 Excel 2002 和 Excel 2003 中,这些文件的名称分别为 Excel.cpp 和 Excel.h。)
  10. 单击“确定”关闭“MFC ClassWizard”对话框。
  11. 将以下代码添加到 CAutoProjectApp::InitInstance() 函数中,该函数加载并启用 COM 服务库:
          BOOL CAutoProjectApp::InitInstance()      {         if(!AfxOleInit())  // Your addition starts here         {            AfxMessageBox("Could not initialize COM dll");            return FALSE;         }                 // End of your addition         AfxEnableControlContainer();      .      .      .      }					
  12. 将下面的代码行添加到 AutoProject.cpp 程序文件开头的 #include 语句中:
          #include <afxdisp.h>					
  13. 将 excel8.h 的 include 语句添加到 AutoProjectDlg.cpp 程序文件开头 stdafx.h 的 include 语句之后:
          #include "stdafx.h"      #include "excel8.h" // excel.h in the case of Excel 2002 and Excel 2003.					
  14. 将自动化代码添加到 CAutoProjectDlg::OnRun() 中,使它看起来像下面这样:
          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. 生成并运行项目。结果:单击对话框中的“运行”按钮时,将启动 Microsoft Excel。激活“Auto_Excel”对话框并关闭消息框。CAutoProjectDlg::OnRun() 函数结束时,Microsoft Excel 将退出,因为这时应用程序变量超出了作用域。

其他说明

将类型库中的类添加到项目(如上面步骤 9 中那样)后,您将发现项目中已添加了许多类。在 ClassView 中,您可以双击某个类查看该类的成员函数,然后双击成员函数,查看该函数在 Excel8.cpp 实现文件中的定义。

如果要验证返回类型或需要更改函数的实现,您需要转到成员函数的定义。每次更改函数定义时,请记住更改 Excel8.h 文件中的声明。这样做时,请务必更改正确的函数声明;有时,多个类的成员函数的名称是相同的(如 GetApplication())。

虽然以上步骤阐述了如何使 Microsoft Excel 自动运行,但您还可以使用同样的方法使其他应用程序自动运行。以下列表包含 Microsoft Office 应用程序类型库的文件名:
   应用程序                           类型库   --------------------------------------------------Microsoft Access 97                   Msacc8.olbMicrosoft Jet Database 3.5            DAO350.dllMicrosoft Binder 97                   Msbdr8.olbMicrosoft Excel 97                    Excel8.olbMicrosoft Graph 97                    Graph8.olbMicrosoft Office 97                   Mso97.dllMicrosoft Outlook 97                  Msoutl97.olbMicrosoft PowerPoint 97               Msppt8.olbMicrosoft Word 97                     Msword8.olbMicrosoft Access 2000                 Msacc9.olbMicrosoft Jet Database 3.51           DAO360.dllMicrosoft Binder 2000                 Msbdr9.olbMicrosoft Excel 2000                  Excel9.olbMicrosoft Graph 2000                  Graph9.olbMicrosoft Office 2000                 Mso9.dllMicrosoft Outlook 2000                Msoutl9.olbMicrosoft PowerPoint 2000             Msppt9.olbMicrosoft Word 2000                   Msword9.olb Microsoft Access 2002                 Msacc.olbMicrosoft Excel 2002                  Excel.exeMicrosoft Graph 2002                  Graph.exe Microsoft Office 2002                 MSO.dllMicrosoft Outlook 2002                MSOutl.olbMicrosoft PowerPoint 2002             MSPpt.olbMicrosoft Word 2002                   MSWord.olbMicrosoft Office Access 2003          Msacc.olbMicrosoft Office Excel 2003           Excel.exeMicrosoft Graph 2003                  Graph.exe Microsoft Office 2003                 MSO.dllMicrosoft Office Outlook 2003         MSOutl.olbMicrosoft Office PowerPoint 2003      MSPpt.olbMicrosoft Office Word 2003            MSWord.olb				
注意:这些类型库的默认位置是 C:\Program Files\Microsoft Office\Office(在 Office 2002 中,相应的路径为 C:\...\Office10;在 Office 2003 中,相应的路径为 C:\...\Office11),Dao350.dll 或 Dao360.dll 以及 Microsoft Office 10 (MSO.dll) 除外。Dao350.dll/Dao360.dll 的默认位置是 C:\Program Files\Common Files\Microsoft Shared\Dao。对于 Office 2002,MSO.dll 的默认位置是 C:\Program Files\Common Files\Microsoft Shared\Office10;对于 Office 2003,其默认位置是 C:\Program Files\Common Files\Microsoft Shared\Office11。
参考
本文介绍了生成对话框项目的具体方法。如果您想查看有关在 Microsoft Developer Studio 环境中生成 VC++ 项目的过程的更为一般性的文档,可以使用 Visual Studio InfoView 访问一个优秀的教程。要访问此教程,请单击“帮助”菜单上的“搜索”。单击“索引”选项卡,并键入以下内容:
使用项目
单击“列出主题”。选择“主页:使用项目”主题,并单击“显示”。 有关使 Office 应用程序自动运行的更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
222101如何查找和使用 Office 对象模型文档
IDispatch ole automation listbox
属性

文章 ID:178749 - 上次审阅时间:12/05/2015 08:16:08 - 修订版本: 4.1

Microsoft Foundation Class Library 4.2, Microsoft Office XP Developer Edition, Microsoft Office 2000 Developer Edition

  • kbnosurvey kbarchive kbhowto kbinterop kbautomation KB178749
反馈