首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> 關於VC++

基於 Visual C++ 實現自動化客戶端:以操作 Word 文檔為例

     編輯:關於VC++

ActiveX Automation 技術讓應用程式得以控制其他程式(如 Microsoft Office 套件)暴露的物件、方法與屬性,實現功能重用。本文以 Visual C++ 6.0 為開發環境,示範建立自動化客戶端,啟動 Word 2000 開啟指定 .doc 文檔、全選內容、複製到剪貼簿,再貼上至自家視圖中。

核心概念

  • 自動化伺服器:提供物件與介面的應用程式(如 Word、Excel)。
  • 自動化客戶端:使用伺服器物件的應用程式。
  • IDispatch 介面:標準化的晚期繫結介面,支援多種語言(含不支援指標的 VB)。
  • 本地與遠端自動化:視雙方是否在同一台電腦而定。

關鍵資料類型:VARIANT 與 COleVariant

自動化跨語言傳遞資料依賴 VARIANT(型別+值)。MFC 封裝為 COleVariant,並提供 COleCurrency、COleDateTime 處理貨幣與日期。

實作步驟

  1. 建立單一文件 MFC 專案,視圖基類選 CEditView。
  2. 匯入 Word 型別庫:ClassWizard → Add Class → From a type library → msword9.olb,勾選 _Application、_Documents、Selection,產生 msword9.h/cpp。
  3. 初始化 COM:在 StdAfx.h 加 #include <afxdisp.h>;InitInstance 開頭呼叫 CoInitialize(NULL)。
  4. 編寫自動化代碼:
void CKkView::OnMenuAutoDisplay() {
    static char BASED_CODE szFilter[] = "Word Files (*.doc)|*.doc||";
    CFileDialog fd(TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, szFilter);
    CString strFilePath;
    if (fd.DoModal() != IDOK) return;
    strFilePath = fd.GetPathName();

    _Application m_App;
    Documents m_Docs;
    Selection m_Sel;

    if (!m_App.CreateDispatch("Word.Application")) {
        AfxMessageBox("建立 Word 服務失敗!");
        return;
    }
    m_App.m_bAutoRelease = TRUE;

    COleVariant varFilePath(strFilePath), varFalse((short)0), varTrue((short)1, VT_BOOL), varNull("");
    m_Docs.AttachDispatch(m_App.GetDocuments());
    m_Docs.Open(varFilePath, varFalse, varFalse, varFalse, varNull, varNull, varFalse, varNull, varNull, varTrue, varTrue, varTrue);

    m_Sel.AttachDispatch(m_App.GetSelection());
    m_Sel.WholeStory();
    m_Sel.Copy();

    GetEditCtrl().Paste();   // 貼上至 CEditView

    m_Docs.ReleaseDispatch();
    m_Sel.ReleaseDispatch();
}

要點總結

  • 使用 COleDispatchDriver 衍生類管理 IDispatch 指標生命週期(CreateDispatch/AttachDispatch/ReleaseDispatch)。
  • 參數皆以 COleVariant 包裝,確保型別正確封送。
  • 透過 Word 宏錄製器(VBA)可快速掌握所需物件模型與方法序列。

此範例展示了自動化客戶端的基本骨架,可延伸至 Excel、PowerPoint 等伺服器,實現更複雜的文檔處理與報表自動化。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved