中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何在C#項目中集成一個Lua腳本

發布時間:2021-03-01 16:59:52 來源:億速云 閱讀:258 作者:Leah 欄目:開發技術

本篇文章為大家展示了如何在C#項目中集成一個Lua腳本,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

步驟

1 引入NLua.dll

  這個dll是一個很輕量級的庫,100kb左右,引用這個庫可以通過Nuget包管理器來引用,當前引用的版本是1.5.7.0,我們看看引用之后的添加了哪些DLL。

如何在C#項目中集成一個Lua腳本

這個里面lua54.dll有x86和x64兩個類型的版本,這個在使用的時候需要注意因為我們生成設置選擇的是Any CPU所以這里會有兩個版本的dll,這里使用的時候需要注意。

2 具體用法

  下面通過一個控制臺應用程序來看看這個腳本到底該怎么使用,這里包括直接創建表達式,注冊方法并使用lua調用C#函數以及直接導入C#的庫然后再調用里面內部的方法這三個方面進行描述。

  2.1 直接創建表達式

       我們來直接看控制臺程序中的代碼

class Program
 {
  static void Main(string[] args)
  {
   using (var state = new Lua())
   {
    //Evaluating simple expressions:
    //Lua can return multiple values, for this reason DoString return a array of objects
    var res0 = state.DoString("return 10 + 3*(5 + 2)")[0];
    Console.WriteLine($"Output result0:{res0}");

    //Passing raw values to the state:
    double val = 12.0;
    state["x"] = val; // Create a global value 'x' 
    var res1 = (double)state.DoString("return 10 + x*(5 + 2)")[0];
    Console.WriteLine($"Output result1:{res1}");

    //Retrieving global values:
    state.DoString("y = 10 + x*(5 + 2)");
    double y = (double)state["y"]; // Retrieve the value of y
    Console.WriteLine($"Y result:{y}");    
    
    Console.ReadKey();
   }
  }}

如何在C#項目中集成一個Lua腳本

注意事項:

  首先來看這個注釋:Lua can return multiple values, for this reason DoString return a array of objects,就是直接調用DoString方法的時候返回的結果是一個object[]類型,所以這里需要取結果的時候要取用第一個 

如何在C#項目中集成一個Lua腳本

  2.2 注冊Lua Function

  這里我們通過直接在DoString中定義好function,然后通過Call方法進行調用,我們再來看下面的示例及返回結果

class Program
 {
  static void Main(string[] args)
  {
   using (var state = new Lua())
   {
    //Retrieving Lua functions:
    state.DoString(@"function ScriptFunc (val1, val2)
           if val1 > val2 then
            return val1 + 1
           else
            return val2 - 1
           end
          end
          ");
    var scriptFunc = state["ScriptFunc"] as LuaFunction;
    var funcRes = scriptFunc.Call(3, 5).First();
    Console.WriteLine($"Func result:{funcRes}");

    Console.ReadKey();
   }
  }
}

  同樣的我們也來看看最終執行的結果

如何在C#項目中集成一個Lua腳本

  2.3 Lua調用C#函數

  下面的例子包含了幾種不同的參數類型及返回類型用來演示調用的完整過程。

using System;
using System.Linq;
using NLua;

namespace NLuaConsoleApp
{
 class Program
 {
  static void Main(string[] args)
  {
   using (var state = new Lua())
   {
    ////---------------------------------------------------lua調用c#函數
    TestClass obj = new TestClass();

    // 注冊CLR對象方法到Lua,供Lua調用 typeof(TestClass).GetMethod("TestPrint")
    state.RegisterFunction("TestPrint", obj, obj.GetType().GetMethod("TestPrint"));

    // 注冊CLR對象方法到Lua,供Lua調用 typeof(TestClass).GetMethod("AnotherFunc")
    state.RegisterFunction("AnotherFunc", obj, obj.GetType().GetMethod("AnotherFunc"));

    // 注冊CLR靜態方法到Lua,供Lua調用
    state.RegisterFunction("TestStaticPrint", null, typeof(TestClass).GetMethod("TestStaticPrint"));

    state.DoString("TestPrint(10,20)");
    state.DoString("AnotherFunc('10','20')");
    state.DoString("TestStaticPrint()");

    Console.ReadKey();
   }
  }

  class TestClass
  {

   public int TestPrint(int num,int num2)
   {
    var result = num + num2;
    Console.WriteLine("Print result:" + result);
    return result;
   }

   public void AnotherFunc(string val1, string val2)
   {
    Console.WriteLine($"MyTest,Param1:{val1},Param2:{val2}");
   }

   public static void TestStaticPrint()
   {
    Console.WriteLine("TestStaticPrint");
   }
  }

 }
}

  同樣的我們來看整個測試的返回完整結果。

如何在C#項目中集成一個Lua腳本

  2.4 通過Import導入命名空間引用C#函數

  這個是按照官方的例子進行模擬的,但是在調用的時候總是報錯,現貼出具體的示例供后面排查使用

class Program
 {
  static void Main(string[] args)
  {
   using (var state = new Lua())
   {
    state.LoadCLRPackage();
    state.DoString(@" import ('System.Web') ");
    state.DoString(@" client = WebClient() ");
    state.DoString(@"local res = client:DownloadString('http://nlua.org')");

    Console.ReadKey();
   }
  }
 }

  這個就是說通過調用C#程序集并引入命名空間,然后調用其內部的WebClient方法,這個在調試的時候一直都是報錯,這個暫時記錄供以后進行排查錯誤

如何在C#項目中集成一個Lua腳本

上述內容就是如何在C#項目中集成一個Lua腳本,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

lua
AI

唐河县| 晋中市| 婺源县| 湘阴县| 吴川市| 唐海县| 丰原市| 清水河县| 乌海市| 凤冈县| 含山县| 远安县| 府谷县| 应城市| 连江县| 会宁县| 收藏| 盐亭县| 铜山县| 绿春县| 栾川县| 晋江市| 永善县| 芜湖县| 南川市| 岳普湖县| 监利县| 涪陵区| 囊谦县| 灵丘县| 建宁县| 绥滨县| 新巴尔虎左旗| 元氏县| 调兵山市| 黄梅县| 金湖县| 漳浦县| 和顺县| 新密市| 郑州市|