加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Lua与.net的CLR相互调用

发布时间:2020-12-14 21:53:57 所属栏目:大数据 来源:网络整理
导读:工程环境搭建: 下载luainterface-1.5.3.zip文件,使用到的dll为Built目录下的LuaInterface.dll、lua51.dll、luanet.dll LuaInterface.dll为C#的dll,需要引用到工程中 lua51.dll、luanet.dll为C++的dll,需要拷贝到工程的输出目录下(Debug) C#调用Lua需要

工程环境搭建:

  • 下载luainterface-1.5.3.zip文件,使用到的dll为Built目录下的LuaInterface.dll、lua51.dll、luanet.dll
  • LuaInterface.dll为C#的dll,需要引用到工程中
  • lua51.dll、luanet.dll为C++的dll,需要拷贝到工程的输出目录下(Debug)
  • C#调用Lua需要使用:LuaInterface.dll和lua51.dll
  • Lua调用C#的类需要使用:LuaInterface.dll和luanet.dll,luanet.dll拷贝到工程输出目录,lua脚本中就不需要使用package.cpath和require了

很多帖子并没有讲清楚导致报错:

“LuaInterface.LuaException”类型的未经处理的异常在 LuaInterface.dll 中发生
其他信息: error loading module 'luanet' from file '.luanet.dll'
也就是云哥我这么给力
 1 namespace TestLua
 2 {
 3     public class Program
 4     {
 5 
 6         public string name = "zhaozongyun";
 7         static void Main(string[] args)
 8         {
 9             //创建lua解释器(也叫Lua虚拟机)
10             Lua lua1 = new Lua();
11 
12             Console.WriteLine("--->> C#中执行Lua字符串");
13 
14             //C#中执行Lua字符串
15             lua1.DoString("num = 111");
16             lua1.DoString("str = 'zhaozongyun'");
17             Object[] values = lua1.DoString("return num,str");
18             foreach (Object obj in values)
19             {
20                 Console.WriteLine(obj);
21             }
22 
23             Console.WriteLine("--->> C#注册的普通方法到Lua中,并执行Lua字符串");
24 
25             //C#注册的普通方法到lua中,并执行Lua字符串
26             Program p = new Program();
27             Lua lua2 = new Lua();
28             lua2.RegisterFunction("LuaMethod1",p,p.GetType().GetMethod("CLRMethod"));
29             lua2.DoString("LuaMethod1()");
30 
31             Console.WriteLine("--->> C#注册静态方法到Lua中,并执行Lua字符串");
32 
33             //C#注册静态方法到Lua中,并执行Lua字符串
34             lua2.RegisterFunction("LuaMethod2",null,typeof(Program).GetMethod("StaticMethod"));
35             lua2.DoString("LuaMethod2()");
36 
37             Console.WriteLine("--->> C#中执行Lua脚本");
38 
39             //C#中执行lua脚本文件
40             Lua lua3 = new Lua();
41             lua3.DoFile("myLua1.lua");
42 
43             Console.WriteLine("--->>C#执行Lua脚本,Lua脚本中加载C#类,并访问C#");
44 
45             //C#执行Lua文件,Lua文件加载C#类,并调用C#
46             Lua lua4 = new Lua();
47             lua4.DoFile("myLua2.lua");
48             lua4.DoFile("myLua3.lua");
49 
50             Console.ReadKey();
51         }
52 
53         public void CLRMethod()
54         {
55             Console.WriteLine("CLRMethod");
56         }
57 
58         public static void StaticMethod()
59         {
60             Console.WriteLine("StaticMethod");
61         }
62     }
63 }

?

Lua1脚本

1 num = 222
2 string = "hello world"
3 print(string)

Lua2脚本

1 --加载CLR的类型、实例化CLR对象
2 luanet.load_assembly("System")
3 Int32 = luanet.import_type("System.Int32")
4 print(Int32)

Lua3脚本

1 --require "luanet"
2 --加载CLR的类型
3 luanet.load_assembly("TestLua")
4 Program = luanet.import_type("TestLua.Program")
5 --实例化CLR对象
6 program = Program()
7 print(program.name)
8 program:CLRMethod()

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读