rainbowzc

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: :: :: 管理 ::

概要
自动化和 COM
从 Visual C++ 使用自动化的三种方法
如何使用 Office 类型库
使嵌入的 Office 组件自动运行
参考


一、概要
您可以使用自动化功能从 Visual C++ 应用程序中控制 Microsoft Office 组件。本文提供使 Office 自动运行所需的基本信息以及指向相关资源和示例代码的指针。 

息自动化(以前称为 OLE 自动化)是一种技术,该技术允许您利用现有程序的功能并将其合并到您自己的应用程序中。例如,您可以在应用程序中使用 Microsoft Word 的拼写和语法检查功能,而不让用户看到 Microsoft Word。您甚至可以使用 Microsoft Excel 的所有图表、打印和数据分析工具。该技术可以大大简化和加快您的开发。


二、自动化和 COM
自动化建立在组件对象模型 (COM) 的基础上。COM 是一种基于接口的标准软件结构,旨在将代码分离为独立的对象。可以将它看作是面向对象编程 (OOP) 范例的扩展,但是它也适用于单独的应用程序。每个对象都公开一组接口,到对象的所有通信(如初始化、通知和数据传输)都是通过这些接口进行的。

COM 还是随操作系统一起安装的动态链接库 (DLL) 所提供的一组服务。自动化会用到其中的许多服务。其中一个示例就是“封送处理”服务,该服务将客户端应用程序的调用打包到服务器应用程序接口的成员函数中,然后将这些函数及其参数传递给服务器应用程序。服务器的接口可能会在客户端的内存空间中公开,但是,如果客户端是 .exe 文件,而且在自己的进程空间运行,则不会出现这种情况。封送处理还可以跨越进程边界从服务器的方法中获取返回值,并将这些值安全地传递给客户端调用。

各种 COM 库提供了对自动化非常重要的许多其他服务。关于这些服务的信息来源包括: ? “Inside OLE - Second Edition”,Kraig Brockschmidt 著,ISBN 1-55615-843-2
? “Inside COM”,Dale Rogerson 著,ISBN 1-57231-349-8
? “Automation Programmer's Reference”,ISBN 1-57231-584-9

 

三、从 Visual C++ 使用自动化的三种方法
可通过以下三种基本方法来使用自动化:MFC、#import 和 C/C++: ? 借助于 MFC,您可以使用 Visual C++ ClassWizard 从 Microsoft Office 类型库生成“包装类”。这些类以及诸如 COleVariant、COleSafeArray 和 COleException 之类的其他 MFC 类可简化自动化任务。此方法优于其他方法,通常建议使用该方法,并且大部分 Microsoft 知识库示例都使用 MFC。
? #import 是 Visual C++ 5.0 中引入的一个新指令,它可以从指定的类型库创建 VC++“智能指针”。它的功能非常强大,但通常不建议使用它,因为它与 Microsoft Office 应用程序一起使用时,经常会出现引用计数问题。
? C/C++ 自动化要困难得多,但有时为了避免由于使用 MFC 时所造成的开销或避免使用 #import 时所出现的问题,需要使用该方法。基本上,您会用到 CoCreateInstance() 这样的 API 以及诸如 IDispatch 和 IUnknown 之类的 COM 接口。
必须注意,C++ 中的自动化与普通的 C 中的自动化稍有不同,因为 COM 是围绕 C++ 类设计的。 有关使用 C 进行自动化的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
181473 (http://support.microsoft.com/kb/181473/) 如何在 C 应用程序中而不是在 C++ 中使用 OLE 自动化


四、如何使用 Office 类型库
类型库与 C/C++ 头文件类似。它包含服务器发布的接口、方法和属性。您可以使用 Visual C++ 附带的 OLE/COM 对象查看器 (Oleview.exe) 来查看类型库。下面列出了 Microsoft Office 95、Microsoft Office 97、Microsoft Office 2000 和 Microsoft Office XP 的类型库文件名:

Office 应用程序 类型库
Word 95 及更低版本 wb70en32.tlb
Excel 95 及更低版本 xl5en32.olb
PowerPoint 95 及更低版本 PowerPoint.tlb
Access 95 及更低版本 msaccess.tlb
Binder 95 binder.tlb
Schedule+ sp7en32.olb
Project pj4en32.olb
Team Manager mstmgr1.olb
Word 97 msword8.olb
Excel 97 excel8.olb
PowerPoint 97 msppt8.olb
Access 97 msacc8.olb
Binder 97 msbdr8.olb
Graph 97 graph8.olb
Outlook 97 msoutl8.olb
Outlook 98 msoutl85.olb
Word 2000 msword9.olb
Excel 2000 excel9.olb
PowerPoint 2000 msppt9.olb
Access 2000 msacc9.olb
Outlook 2000 msoutl9.olb
Word 2002 msword.olb
Excel 2002 excel.olb
PowerPoint 2002 msppt.olb
Access 2002 msacc.olb
Outlook 2002 msoutl.olb
Office Word 2003 msword.olb
Office Excel 2003 excel.exe
Office PowerPoint 2003 msppt.olb
Office Access 2003 msacc.olb
Office Outlook 2003 msoutl.olb


这些类型库为您提供了有关需要使用的对象、方法和属性的信息。学习如何导航 Word、Excel 和 Powerpoint 的对象模型的最佳方法是使用这些 Office 应用程序中的宏录制器:

1. 从工具菜单上的宏选项中选择录制新宏,然后执行您感兴趣的任务。
2. 从工具菜单上的宏选项中选择停止录制。
3. 完成录制后,从工具菜单上的宏选项中选择宏,选择您录制的宏,然后单击编辑。
您将看到生成的 VBA 代码,该代码可完成您所录制的任务。记住,录制的宏在大多数情况下并不是最佳代码,但它可以提供快捷可用的示例。


五、使嵌入的 Office 组件自动运行
要使嵌入的 Office 对象或应用程序自动运行,您需要获取该对象的 IDispatch 指针。Visual C++ 技术说明 39 (TN039) 中提供了该指针。您可以在“Visual C++ 参考”的“Microsoft 基础类库”中找到该技术说明。要获取分步示例,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
184663 (http://support.microsoft.com/kb/184663/) 如何使用 MFC 嵌入并自动化 Microsoft Excel 工作表


参考
David Kruglinski 的“Inside Visual C++”(ISBN:1-57231-565- 2)第 24 章概述了该内容并提供了一些很好的示例。此外,Microsoft 知识库也是一个很好的信息来源。

有关其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
152023 (http://support.microsoft.com/kb/152023/) 查找用来学习自动化的资源
 

posted on 2006-07-28 00:18  ct  阅读(742)  评论(0编辑  收藏  举报