国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

C#和lua相互調用的方法教程

2019-10-29 21:09:00
字體:
來源:轉載
供稿:網友

color: #ff0000">前言

自從ulua在官網上出來后,lua 就被u3d開發人員喜愛。國內有幾個高手把lua拿過來 接著進行了封裝。很多都是新手轉過來。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解釋器可以同時存在多個,并且它們之間是完全相互獨立的。

簡單說明下步驟:

lua,c#,相互調用,c,調用lua,調用lua函數

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

lua,c#,相互調用,c,調用lua,調用lua函數

  lua,c#,相互調用,c,調用lua,調用lua函數

  lua,c#,相互調用,c,調用lua,調用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 點擊啟動

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

#2317c1e29524eb42a3a3efcd94f77a8c#

解決方案:

  lua,c#,相互調用,c,調用lua,調用lua函數

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

lua,c#,相互調用,c,調用lua,調用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");    }  }}

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

  lua,c#,相互調用,c,調用lua,調用lua函數

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

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

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網的支持。


注:相關教程知識閱讀請移步到c#教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 泸水县| 大足县| 桐梓县| 上栗县| 陇西县| 东源县| 韩城市| 得荣县| 鹤庆县| 紫阳县| 昭通市| 辽宁省| 梓潼县| 武安市| 石台县| 灵川县| 双牌县| 大港区| 岱山县| 瑞安市| 乌兰察布市| 中阳县| 拜城县| 宜良县| 兴文县| 平乡县| 金堂县| 罗甸县| 德钦县| 肥西县| 乌兰县| 海阳市| 安岳县| 新竹县| 富裕县| 河东区| 大英县| 云林县| 通江县| 周宁县| 新闻|