溫馨提示×

溫馨提示×

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

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

C#和lua如何相互調用

發布時間:2021-08-07 10:14:41 來源:億速云 閱讀:319 作者:小新 欄目:編程語言

小編給大家分享一下C#和lua如何相互調用,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

Lua是一種很好的擴展性語言,Lua解釋器被設計成一個很容易嵌入到宿主程序的庫。LuaInterface則用于實現Lua和CLR的混合編程。

C與lua交互面臨以下幾個問題:

1、由于lua里面的數據都是動態加載的所以內存也是動態分配的,也沒有static 這樣的修飾,而C里面有 static const 這樣的靜態類型數據

2、c里面是手動管理內存lua 里面是自動管理內存

所以為了解決這些問題就采用了一個抽象棧來讓lua與c交換值,好比c里面的 void*  可以指向任何地址而不用管存儲類型。這樣兩邊都不管你傳的何種類型的參數,只用知道它是一個地址指針。兩邊用的時候再強制轉換成對應的類型。

下面開始本文的正文吧。

(一)C#調用Lua

測試環境:在VS2015中建一個C#控制臺應用程序,并添加LuaInterface.dll的引用

LuaInterface下載地址:http://luaforge.net/projects/luainterface/(下載luainterface-1.5.3,這里面的資源比較多)

LuaInterface.Lua類是CLR訪問Lua解釋器的主要接口,一個LuaInterface.Lua類對象就代表了一個Lua解釋器(或Lua執行環境),Lua解釋器可以同時存在多個,并且它們之間是完全相互獨立的。

簡單說明下步驟:

C#和lua如何相互調用

在根目錄處添加LuaInterface.dll的引用:

C#和lua如何相互調用

  C#和lua如何相互調用

  C#和lua如何相互調用

不啰嗦、直接上代碼:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using LuaInterface;

namespace CSharpToLua
{
  class Program
  {
    static void Main(string[] args)
    {
      // 新建一個Lua解釋器,每一個Lua實例都相互獨立, 一個global全局域
      Lua lua = new Lua();

      //---------------------------------------------------
      // Lua的索引操作[]可以創建、訪問、修改global域
      lua["age"] = 20;
      lua["name"] = "Mr.huang";

      string luaCode = "print(\"This is Lua code\")";
      lua.DoString(luaCode);//執行lua腳本代碼
        lua.DoFile("F:\\CSharpToLua\\CSharpToLua\\ScriptsFromFile.lua");//執行lua腳本文件,這里我直接用了絕對定位

      double age = (double)lua["age"];

      Console.WriteLine("age = {0}", age);
      Console.WriteLine("width = {0}", lua["width"]);
      Console.ReadKey();
    }
  }

}

可以跟著敲一遍,提高與代碼的親密度 ~.~ And then 點擊啟動

咦、這時會出現一個報錯、但是不要緊、

C#和lua如何相互調用

解決方案:

  C#和lua如何相互調用

再次運行、就可以看到結果啦、驚不驚喜、意不意外

C#和lua如何相互調用

簡單的介紹C#如何調用Lua代碼、當然、還有很多豐富的API小伙伴們可以自行查閱喲。

(二)Lua調用C#

直接上代碼 ~.~

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using LuaInterface;

namespace CSharpToLua
{
  class Program
  {
    static void Main(string[] args)
    {
      // 新建一個Lua解釋器,每一個Lua實例都相互獨立, 一個global全局域
      Lua lua = new Lua();


      //---------------------------------------------------lua調用c#函數
      TestClass obj = new TestClass();

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

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

      lua.DoString("TestPrint(10)");
      lua.DoString("TestStaticPrint()");

      Console.ReadKey();
    }
  }

  class TestClass
  {
    private int value = 0;

    public void TestPrint(int num)
    {
      value = num;
      Console.WriteLine("CSharp"+value);
    }

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

點擊運行.................

  C#和lua如何相互調用

perfect~.~ 當然、這里只是簡單的介紹C#與Lua是如何相互調用的、小伙伴可自行Google大量豐富的API方便開發喲

重要的事要說三遍:LuaInterface是主要接口、LuaInterface是主要接口、LuaInterface是主要接口

以上是“C#和lua如何相互調用”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

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

lua
AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女