INFO:使用 Visual C++ 使 Office 自动化
文章编号 |
: |
238972 |
最后修改 |
: |
2006年3月30日 |
修订 |
: |
6.1 |
概要
您可以使用自动化功能从 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 |