一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - C# - C#和lua相互調用的方法教程

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

2022-01-25 14:19Mr.小Y C#

lua是一種腳本語言,可以方便的移植到各種宿主語言中,并且可以支持熱更新,在游戲開發中也能當做主要的語言來編寫游戲的邏輯,所以這篇文章主要給大家介紹了關于C#和lua相互調用的方法教程,需要的朋友可以參考下。

前言

自從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解釋器可以同時存在多個,并且它們之間是完全相互獨立的。

簡單說明下步驟:

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

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

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

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

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

不啰嗦、直接上代碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
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#

直接上代碼 ~.~

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
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是主要接口

總結

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

原文鏈接:http://www.cnblogs.com/huangzongyi/p/7777635.html

延伸 · 閱讀

精彩推薦
  • C#C# 實現對PPT文檔加密、解密及重置密碼的操作方法

    C# 實現對PPT文檔加密、解密及重置密碼的操作方法

    這篇文章主要介紹了C# 實現對PPT文檔加密、解密及重置密碼的操作方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下...

    E-iceblue5012022-02-12
  • C#C#設計模式之Visitor訪問者模式解決長隆歡樂世界問題實例

    C#設計模式之Visitor訪問者模式解決長隆歡樂世界問題實例

    這篇文章主要介紹了C#設計模式之Visitor訪問者模式解決長隆歡樂世界問題,簡單描述了訪問者模式的定義并結合具體實例形式分析了C#使用訪問者模式解決長...

    GhostRider9502022-01-21
  • C#深入解析C#中的交錯數組與隱式類型的數組

    深入解析C#中的交錯數組與隱式類型的數組

    這篇文章主要介紹了深入解析C#中的交錯數組與隱式類型的數組,隱式類型的數組通常與匿名類型以及對象初始值設定項和集合初始值設定項一起使用,需要的...

    C#教程網6172021-11-09
  • C#C#裁剪,縮放,清晰度,水印處理操作示例

    C#裁剪,縮放,清晰度,水印處理操作示例

    這篇文章主要為大家詳細介紹了C#裁剪,縮放,清晰度,水印處理操作示例,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    吳 劍8332021-12-08
  • C#Unity3D實現虛擬按鈕控制人物移動效果

    Unity3D實現虛擬按鈕控制人物移動效果

    這篇文章主要為大家詳細介紹了Unity3D實現虛擬按鈕控制人物移動效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一...

    shenqingyu060520232410972022-03-11
  • C#C#實現XML文件讀取

    C#實現XML文件讀取

    這篇文章主要為大家詳細介紹了C#實現XML文件讀取的相關代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    Just_for_Myself6702022-02-22
  • C#C#通過KD樹進行距離最近點的查找

    C#通過KD樹進行距離最近點的查找

    這篇文章主要為大家詳細介紹了C#通過KD樹進行距離最近點的查找,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    帆帆帆6112022-01-22
  • C#WPF 自定義雷達圖開發實例教程

    WPF 自定義雷達圖開發實例教程

    這篇文章主要介紹了WPF 自定義雷達圖開發實例教程,本文介紹的非常詳細,具有參考借鑒價值,需要的朋友可以參考下...

    WinterFish13112021-12-06
主站蜘蛛池模板: 免费特黄一区二区三区视频一 | 狠狠色狠狠色综合日日小蛇 | 免费在线视频一区 | 四虎影音先锋 | 色综合综合色 | 华人亚洲欧美精品国产 | 日本高清视频在线免费观看 | 亚洲日本久久一区二区va | 99精品在线视频 | 男人和女人全黄一级毛片 | 亚洲精品乱码久久久久久蜜桃图片 | 国产欧美一区二区三区久久 | 欧美a一片xxxx片与善交 | 国产精品久久久久久影院 | 99视频在线观看视频一区 | 日韩成本大片35分钟免费播放 | 青青国产成人久久激情91麻豆 | 精品无码久久久久久久动漫 | 国产亚洲精品第一综合另类 | 精品久久久久久无码人妻国产馆 | 国产亚洲欧美日韩综合综合二区 | 免费在线影院 | 亚洲阿v天堂在线2017 | 热久久99精品这里有精品 | 日本在线一区二区 | 色多多在线视频 | 国产一区私人高清影院 | 高清一区高清二区视频 | 亚洲天堂精品在线观看 | 丝袜捆绑调教视频免费区 | 国产成人久久精品推最新 | 亚洲伦理一区 | 美女模特被c免费视频 | 国产精品高清视亚洲一区二区 | 耽美双性 | 蜜汁肉桃全文免费阅读 | 国产成人综合精品 | 情侣宾馆愉拍自拍视频 | girlfriend动漫在线播放 | 国产精品资源在线观看网站 | 纲手被强喷水羞羞漫画 |