lua学习笔记3--lua与c#交互
LuaInterface是C#与Lua连接的桥梁
LuaInterface是一个开源项目工程,内部有两个核心DLL文件:
LuaInterface.dll:在C#中操作Lua代码需要依赖该文件;
luanet.dll:在Lua中访问C#的类库脚本需要依赖该文件
将两个dll文件拷贝到项目工程
项目工程设置"引用"导入LuaInterface.dll
将两个dll的属性都设置成"如果较新则复制"
操作:
引入LuaInterface命名空间
实例化Lua解析器对象[在C#中执行Lua代码,靠的就是这个对象]
Lua lua = new Lua();
Lua解析器对象操作Lua代码空间
使用Lua解析器对象,往Lua代码空间内写入变量,然后再读取使用变量
(绝大多数情况,直接在C#中使用Lua解析器对象,加载一个Lua脚本文件进行运行)
C#内执行Lua代码:
语法格式 Lua解析器对象.DoString("Lua代码");
注意:
DoString()方法主要用于执行一些较短的Lua代码片段
DoString()方法执行过的代码,都会添加到Lua代码空间,在Lua文件中,是直接可以访问到这些代码的
//创建一个Lua解析器 Lua lua = new Lua();
//变量的声明和访问 lua.DoString("name = 'cxk' age = 72 address = 'beijing'"); lua.DoString("print(name, age, address)"); //for循环语句 lua.DoString(@"for i = 0, 10, 1 do print(i) end"); //函数的定义与调用 lua.DoString(@"function Show() print('lua show Function') end Show() "); //table数组声明与访问 lua.DoString("myArray = { 'AAA', 'BBB', 'CCC', 'DDD'}"); lua.DoString(@"for i = 1, table.getn(myArray), 1 do print(myArray[i]) end");
C#内执行Lua文件
Lua解析器对象.DoFile("[路径]Lua文件.lua") lua文件编码记得改为UTF-8或者ANSI
Lua lua = new Lua(); lua.DoFile("xxx.lua"); //GetString() 取Lua中字符串数据 lua.GetString("name"); //GetNumber() 取Lua中数值数据 lua.GetNumber("age"); //GetFunction 取Lua中的函数,只需写函数名 LuaFunction luaShow = lua.GetFunction("Show"); luaShow.Call();//执行lua中的函数 LuaFunction add = lua.GetFunction("Add"); System.Object[] obj = add.Call(10, 20);
lua访问已存在的C#代码
1导入luanet.dll require "luanet"
2获取程序集 luanet.load_assembly("程序集名")
3获取类型 变量名=luanet.import_type("程序集名.类名")
require "launet" luanet.load_assembly("three") Calc = luanet.import_type("three.Calc") print(Calc.name) print(Calc.Jia(10, 20))
lua访问C#类库
require "launet" luanet.load_assembly("System") Console = luanet.import_type("System.Console") Console.WriteLine("")