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("")