小編給大家分享一下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解釋器可以同時存在多個,并且它們之間是完全相互獨立的。
簡單說明下步驟:

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



不啰嗦、直接上代碼:
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代碼、當然、還有很多豐富的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");
}
}
}點擊運行.................

perfect~.~ 當然、這里只是簡單的介紹C#與Lua是如何相互調用的、小伙伴可自行Google大量豐富的API方便開發喲
重要的事要說三遍:LuaInterface是主要接口、LuaInterface是主要接口、LuaInterface是主要接口
以上是“C#和lua如何相互調用”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。