激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

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

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
主站蜘蛛池模板: 日本aaa一级片 | 俄罗斯16一20sex牲色另类 | 久草在线手机视频 | 色播视频在线播放 | 欧美精品免费一区二区三区 | 欧美不卡三区 | 特黄一级小说 | 中文字幕在线观看亚洲 | 国产精品岛国久久久久久久 | 视频国产一区二区 | 96视频在线免费观看 | 一区二区三级视频 | 欧美日韩综合视频 | 9999久久久久久| 免费高清一级欧美片在线观看 | 亚洲网站在线观看 | 一级在线观看视频 | 成人av一区二区免费播放 | 在线观看视频日本 | 精品一区二区久久久久久久网精 | 强伦女教师视频 | 久久免费视频3 | 国产欧美精品综合一区 | 久草在线小说 | 亚洲精品aaaaa | 成人性生活视频在线播放 | 国产免费观看一区二区三区 | 一区播放 | 国产黄色一区二区 | 日日草夜夜 | 免费观看高清视频网站 | 精品国产一区二区三区久久久蜜月 | 亚洲第一页中文字幕 | 高清视频一区二区 | 久久国产精品网 | 亚洲资源在线播放 | 色视频在线 | 精品久久久久久久久中文字幕 | 欧美一级淫片免费播放口 | www.91sese| 四虎影院成人 |