程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#發現之旅第十四講 基於動態編譯的VB.NET腳本引擎(下)(3)

C#發現之旅第十四講 基於動態編譯的VB.NET腳本引擎(下)(3)

編輯:關於C語言

創建全局對象容器

為了在腳本代碼中 使用document,window這樣的全局對象,筆者得創建一個類型為GlobalObject的全局對象容 器,定義該類型的代碼如下

namespace MyVBAScript.Global
{
     /// <summary>
    /// 定義VB.Net腳本使用的全局對象容器類型
    /// </summary>
     [Microsoft.VisualBasic.CompilerServices.StandardModuleAttribute()]
     public class GlobalObject
    {
        internal static  XVBAWindowObject myWindow = null;
        ///  <summary>
        /// 全局的 window 對象
         /// </summary>
        public static XVBAWindowObject  Window
        {
            get { return  myWindow; }
        }

        internal static  frmMain.DocumentClass myDocument = null;
        ///  <summary>
        /// 全局 document 對象
         /// </summary>
        public static  frmMain.DocumentClass Document
        {
             get { return myDocument; }
        }
    }
}

在這個腳本全局對象容器類型中,筆者添加了StandardModuleAttribute特性 ,並定義了Window和Document兩個靜態屬性。未來我們將腳本要操作的window對象和 document對象設置到這兩個靜態屬性中。

和其他類型不一樣,筆者設置該類型的名稱 空間為MyVBAScript.Global,這樣是為了將全局對象和其他類型區別開來,減少VB.Net編譯 器的工作量。

初始化腳本引擎

在窗體的加載事件中我們初始化腳本引擎,其 代碼為

private void frmMain_Load(object sender, EventArgs e)
{
    //初始化窗體

    // 創建腳本引擎
     myVBAEngine = new XVBAEngine();
     myVBAEngine.AddReferenceAssemblyByType(this.GetType());
     myVBAEngine.VBCompilerImports.Add("MyVBAScript.Global");
    // 設置腳 本引擎全局對象
    MyVBAScript.Global.GlobalObject.myWindow = new  XVBAWindowObject(this, myVBAEngine, this.Text);
     MyVBAScript.Global.GlobalObject.myDocument = new DocumentClass(this);
     // 加載演示腳本文本
    string strDemoVBS =  System.IO.Path.Combine(System.Windows.Forms.Application.StartupPath,  "demo.vbs");
    if (System.IO.File.Exists(strDemoVBS))
     {
        System.IO.StreamReader reader = new  System.IO.StreamReader(strDemoVBS, System.Text.Encoding.GetEncoding ("gb2312"));
        string script = reader.ReadToEnd();
         reader.Close();
        myVBAEngine.ScriptText =  script;
        if (myVBAEngine.Compile() == false)
         {
            this.txtEditor.Text = "編譯默認腳本錯 誤:"r"n" + myVBAEngine.CompilerOutput;
        }
         // 刷新腳本方法列表
        this.RefreshScriptMethodList();
    }
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved