創建全局對象容器
為了在腳本代碼中 使用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();
}
}