Lua与.net的CLR相互调用
来源:互联网 发布:linux 驱动编写步骤 编辑:程序博客网 时间:2024/05/23 15:40
工程环境搭建:
- 下载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 = 2222 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()
0 0
- Lua与.net的CLR相互调用
- Lua与.net的CLR相互调用
- Lua与.net的CLR相互调用
- Lua与.net的CLR相互调用
- Lua与.net的CLR相互调用
- Lua与.net的CLR相互调用
- Lua与.net的CLR相互调用
- LuaInterface的简单学习,CLR与Lua相互调用
- lua与c++的相互调用
- lua 与 c++ 的相互调用
- C/C++与Lua的相互调用
- lua与c++的相互调用
- lua与c++的相互调用
- lua与C++相互调用
- lua与C++相互调用
- lua与C++相互调用
- lua与C++相互调用
- c++与lua相互调用
- Mysql空值(NULL)不能使用算数运算符
- 5种IO模型
- windows下的caffe之GPU配置
- PHP阶乘
- Dubbo与Zookeeper、SpringMVC整合和使用(负载均衡、容错)
- Lua与.net的CLR相互调用
- webpack基本配置
- 算法Codeforces Beta Round #2 winer
- Android文档Training之管理Activity生命周期
- 编辑器中材质参数设置以及记录保存功能
- nignx实现图片截图与缓存 一
- 深入理解React、Redux
- Git 常用操作
- JS委派事件