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

讓應用程式支援腳本執行:以 COM 包裝器整合 VBScript/JScript

     編輯:關於VC++

動機

VBScript 與 JScript 是輕量、易學且廣泛應用的腳本語言,透過 COM (IDispatch/Automation) 呼叫元件極為便利。若應用程式內建腳本執行引擎,不僅簡化開發,更能大幅擴充軟體功能彈性(如使用者自訂宏、外掛邏輯、批次處理等)。

解決方案:VBSEngin EXE 包裝元件

開發一個支援 Automation (IDispatch) 的獨立 EXE 元件 VBSEngin.exe,對外僅公開兩個方法:

方法功能參數說明
SetScriptLanguage(long nLanguage)設定腳本語言0 = VBScript (預設)
1 = JScript
Run(LPCSTR lpszProgram)執行腳本程式碼傳入完整腳本原始碼字串

整合步驟 (以 VC6 MFC 專案為例)

  1. 部署元件:將 VBSEngin.exe、VBSEngin.tlb 複製至任意目錄,執行一次 VBSEngin.exe 完成 COM 註冊。
  2. 專案初始化 COM:在 CWinApp::InitInstance() 中呼叫 AfxOleInit(),或於使用前呼叫 CoInitialize(NULL),結束時呼叫 CoUninitialize()。
  3. 匯入類型庫:開啟 ClassWizard,Add Class → From a type library,選取 VBSEngin.tlb,產生 IVBSEngin 包裝類別 (vbsengin.h/cpp)。
  4. 呼叫執行腳本:
    #include "vbsengin.h"
    
    void CMyDialog::OnRunScript()
    {
        IVBSEngin vbsEngin; // 宣告腳本執行代理物件
        if (vbsEngin.CreateDispatch(_T("VBSEngin.Api"))) // 啟動代理
        {
            CString script = _T(
                "Set word = CreateObject(\"Word.Application\")\n"
                "word.Visible = True\n"
                "word.Documents.Add\n"
                "word.Selection.TypeText \"Hello\"\n"
                "word.Selection.TypeParagraph\n"
                "word.Selection.TypeText \"good morning\"\n"
                "word.ActiveDocument.SaveAs \"c:\\Hello.doc\"\n"
                "word.Quit False\n"
                "Set word = Nothing"
            );
            vbsEngin.Run(script); // 執行腳本
            vbsEngin.ReleaseDispatch(); // 釋放代理
        }
    }

應用範例:腳本自動化 Word 產生文件

上述範例腳本示範:啟動 Word、建立文件、輸入文字、存檔為 c:\Hello.doc、關閉 Word。開發者可在 Word 中錄製巨集 (VBA),稍加修改即可轉為 VBScript/JScript 字串嵌入程式。

優勢總結

  • 零侵入式:主程式無需連結腳本引擎庫,僅透過 COM 介面呼叫。
  • 語言中立:同一介面支援 VBScript/JScript 切換。
  • 部署簡單:單一 EXE + TLB,註冊即用。
  • 擴充性高:腳本可存取任意 COM 物件 (Word、Excel、ADO、WMI、自訂元件等)。

注意事項

  • 執行腳本的執行緒必須為 STA (單執行緒單元),MFC 應用程式預設符合。
  • 腳本錯誤會透過 COM 回傳 HRESULT,建議搭配 IScriptControl 進階錯誤處理 (非本文範圍)。
  • VC7/.NET 使用者請對應調整專案設定與 #import 用法。

本文配套原始碼 (VBSEngin 元件與 MFC 範例專案) 可供下載。

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