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 95binder.tlb
Schedule+sp7en32.olb