C#與lua相互調用

来源:http://www.cnblogs.com/huangzongyi/archive/2017/11/03/7777635.html
-Advertisement-
Play Games

Lua是一種很好的擴展性語言,Lua解釋器被設計成一個很容易嵌入到宿主程式的庫。LuaInterface則用於實現Lua和CLR的混合編程。 (一)C#調用Lua 測試環境:在VS2015中建一個C#控制台應用程式,並添加LuaInterface.dll的引用 LuaInterface下載地址:ht ...


  Lua是一種很好的擴展性語言,Lua解釋器被設計成一個很容易嵌入到宿主程式的庫。LuaInterface則用於實現Lua和CLR的混合編程。

(一)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的引用:

  

  

  

  不啰嗦、直接上代碼:

  

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 using LuaInterface;
 7 
 8 namespace CSharpToLua
 9 {
10     class Program
11     {
12         static void Main(string[] args)
13         {
14             // 新建一個Lua解釋器,每一個Lua實例都相互獨立, 一個global全局域
15             Lua lua = new Lua();
16 
17             //---------------------------------------------------
18             // Lua的索引操作[]可以創建、訪問、修改global域
19             lua["age"] = 20;
20             lua["name"] = "Mr.huang";
21 
22             string luaCode = "print(\"This is Lua code\")";
23             lua.DoString(luaCode);//執行lua腳本代碼
24                 lua.DoFile("F:\\CSharpToLua\\CSharpToLua\\ScriptsFromFile.lua");//執行lua腳本文件,這裡我直接用了絕對定位
25 
26             double age = (double)lua["age"];
27 
28             Console.WriteLine("age = {0}", age);
29             Console.WriteLine("width = {0}", lua["width"]);
30             Console.ReadKey();
31         }
32     }
33 
34 }

  可以跟著敲一遍,提高與代碼的親密度 ~.~   And then 點擊啟動

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

  

  解決方案:

  

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

  

  簡單的介紹C#如何調用Lua代碼、當然、還有很多豐富的API小伙伴們可以自行查閱喲。

 

(二)Lua調用C#

  直接上代碼 ~.~

 

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 using LuaInterface;
 7 
 8 namespace CSharpToLua
 9 {
10     class Program
11     {
12         static void Main(string[] args)
13         {
14             // 新建一個Lua解釋器,每一個Lua實例都相互獨立, 一個global全局域
15             Lua lua = new Lua();
16 
17 
18             //---------------------------------------------------lua調用c#函數
19             TestClass obj = new TestClass();
20 
21             // 註冊CLR對象方法到Lua,供Lua調用   typeof(TestClass).GetMethod("TestPrint")
22             lua.RegisterFunction("TestPrint", obj, obj.GetType().GetMethod("TestPrint"));
23 
24             // 註冊CLR靜態方法到Lua,供Lua調用
25             lua.RegisterFunction("TestStaticPrint", null, typeof(TestClass).GetMethod("TestStaticPrint"));
26 
27             lua.DoString("TestPrint(10)");
28             lua.DoString("TestStaticPrint()");
29 
30             Console.ReadKey();
31         }
32     }
33 
34     class TestClass
35     {
36         private int value = 0;
37 
38         public void TestPrint(int num)
39         {
40             value = num;
41             Console.WriteLine("CSharp"+value);
42         }
43 
44         public static void TestStaticPrint()
45         {
46             Console.WriteLine("TestStaticPrint");
47         }
48     }
49 }

 

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

   

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

  重要的事要說三遍:LuaInterface是主要介面、LuaInterface是主要介面、LuaInterface是主要介面

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 從去年伊始,國內外一些大公司都先後推出了面向物聯網領域的平臺產品,如微軟 Azure 平臺的 IoT Hub、阿裡雲平臺的物聯網開發套件、百度雲平臺的物接入 IoT Hub、物解析 IoT Parser 和物管理 IoT Device 等等,但上述公司的產品從平臺特色和技術角度來看,相對比較適合一些 ...
  • 更多的演示 可以下載近乎源碼詳細查看體驗:www.jinhusns.com ...
  • 關於演示產品下載:www.jinhusns.com ...
  • 最近一直在搞各種編碼問題,略有心得,與大家分享一番。 System.Text提供了Encoding的抽象類,這個類提供字元串編碼的方法。常用的編碼方式主要有ASCII,Unicode,UTF8(Unicode編碼的一種)。 Unicode有四種編碼格式,UTF-8, UTF-16,UTF-32,UT ...
  • http://www.cnblogs.com/chenqf/p/6386163.html ...
  • Barrier類用於組織多個線程及時在某個時刻會面,其提供一個回調函數,每次線程調用了SignalAndWait方法後該回調函數就會被執行。 ...
  • InstancePerLifetimeScope:同一個Lifetime生成的對象是同一個實例 SingleInstance:單例模式,每次調用,都會使用同一個實例化的對象;每次都用同一個對象; InstancePerDependency:預設模式,每次調用,都會重新實例化對象;每次請求都創建一個新 ...
  • localStorage和sessionStorage一樣都是用來存儲客戶端臨時信息的對象。localStorage生命周期是永久sessionStorage生命周期為當前視窗或標簽頁,一旦視窗或標簽頁被永久關閉了,那麼所有通過sessionStorage存儲的數據也就被清空了 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...