小編給大家分享一下C#和lua如何相互調用,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
Lua是一種很好的擴展性語言,Lua解釋器被設計成一個很容易嵌入到宿主程序的庫。LuaInterface則用于實現Lua和CLR的混合編程。
C與lua交互面臨以下幾個問題:
1、由于lua里面的數據都是動態(tài)加載的所以內存也是動態(tài)分配的,也沒有static 這樣的修飾,而C里面有 static const 這樣的靜態(tài)類型數據
2、c里面是手動管理內存lua 里面是自動管理內存
所以為了解決這些問題就采用了一個抽象棧來讓lua與c交換值,好比c里面的 void* 可以指向任何地址而不用管存儲類型。這樣兩邊都不管你傳的何種類型的參數,只用知道它是一個地址指針。兩邊用的時候再強制轉換成對應的類型。
下面開始本文的正文吧。
(一)C#調用Lua
測試環(huán)境:在VS2015中建一個C#控制臺應用程序,并添加LuaInterface.dll的引用
LuaInterface下載地址:http://luaforge.net/projects/luainterface/(下載luainterface-1.5.3,這里面的資源比較多)
LuaInterface.Lua類是CLR訪問Lua解釋器的主要接口,一個LuaInterface.Lua類對象就代表了一個Lua解釋器(或Lua執(zhí)行環(huán)境),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的索引操作[]可以創(chuàng)建、訪問、修改global域 lua["age"] = 20; lua["name"] = "Mr.huang"; string luaCode = "print(\"This is Lua code\")"; lua.DoString(luaCode);//執(zhí)行l(wèi)ua腳本代碼 lua.DoFile("F:\\CSharpToLua\\CSharpToLua\\ScriptsFromFile.lua");//執(zhí)行l(wèi)ua腳本文件,這里我直接用了絕對定位 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靜態(tài)方法到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方便開發(fā)喲
重要的事要說三遍:LuaInterface是主要接口、LuaInterface是主要接口、LuaInterface是主要接口
以上是“C#和lua如何相互調用”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注創(chuàng)新互聯成都網站建設公司行業(yè)資訊頻道!
另外有需要云服務器可以了解下創(chuàng)新互聯scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
網站名稱:C#和lua如何相互調用-創(chuàng)新互聯
文章鏈接:http://www.rwnh.cn/article44/dosihe.html
成都網站建設公司_創(chuàng)新互聯,為您提供電子商務、App設計、網站收錄、用戶體驗、云服務器、網頁設計公司
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯