調用腳本
腳本引擎前期完成的大量的工作就是為了最後能調用腳本,為 此筆者定義了、Execute函數用於調用指定名稱的腳本方法。定義該函數的代碼如下
/// <summary>
/// 執行腳本方法
/// </summary>
/// <param name="MethodName">方法名稱 </param>
/// <param name="Parameters">參數</param>
/// <param name="ThrowException">若發生錯誤是否觸發異常 </param>
/// <returns>執行結果</returns>
public object Execute(string MethodName, object[] Parameters, bool ThrowException)
{
// 檢查腳本引擎狀態
if (CheckReady() == false)
{
return null;
}
if (ThrowException)
{
// 若發生錯誤則拋出異常,則檢查參數
if (MethodName == null)
{
throw new ArgumentNullException("MethodName");
}
MethodName = MethodName.Trim();
if (MethodName.Length == 0)
{
throw new ArgumentException("MethodName");
}
if (this.myScriptMethods.Count > 0)
{
foreach (ScriptMethodInfo info in this.myScriptMethods)
{
// 遍歷所有的腳本方法信 息,不區分大小寫的找到指定名稱的腳本方法
if (string.Compare(info.MethodName, MethodName, true) == 0)
{
object result = null;
if (info.MethodDelegate != null)
{
// 若有委托則執行委托
result = info.MethodDelegate.DynamicInvoke (Parameters);
}
else
{
// 若沒有委托則直接動態執行方 法
result = info.MethodObject.Invoke(null, Parameters);
}
// 返回腳本方法返回值
return result;
}//if
}//foreach
}//if
}
else
{
// 若發生錯誤則不拋出異常,安靜的退出
// 檢查參數
if (MethodName == null)
{
return null;
}
MethodName = MethodName.Trim();
if (MethodName.Length == 0)
{
return null;
}
if (this.myScriptMethods.Count > 0)
{
foreach (ScriptMethodInfo info in this.myScriptMethods)
{
// 遍歷所有的腳本方法信息,不區分大小寫的找到指定名稱的腳本方法
if (string.Compare(info.MethodName, MethodName, true) == 0)
{
try
{
// 執行腳本方法
object result = info.MethodObject.Invoke (null, Parameters);
// 返 回腳本方法返回值
return result;
}
catch (Exception ext)
{
// 若發生錯誤則輸 出調試信息
System.Console.WriteLine("VBA:" + MethodName + ":" + ext.Message);
}
return null;
}//if
}//foreach
}//if
}//else
return null;
}//public object Execute