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

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

編輯:關於C語言

調用腳本

腳本引擎前期完成的大量的工作就是為了最後能調用腳本,為 此筆者定義了、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

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