C#与lua相互调用

2021-05-02 00:28

阅读:417

标签:collect   function   控制   oba   1.5   his   har   reg   names   

  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是主要接口

 

C#与lua相互调用

标签:collect   function   控制   oba   1.5   his   har   reg   names   

原文地址:http://www.cnblogs.com/huangzongyi/p/7777635.html


评论


亲,登录后才可以留言!