Lua与C#的交互实现

lua与C#交互使用LuaInterface实现
定义变量:
1,Lua lua = new Lua() --定义一个解释器
2,lua["num"] = 34 --定义一个小数变量
3,lua["str"] = "string" --定义一个字符串变量

取得lua中变量:

int num = (int)lua["num"]
string str = (string)lua["str"]

在C#中执行lua脚本,语句
lua.DoFile("这里输入一个lua文件")
lua.DoString(“这里输入一条lua语句”)

Lua和C#的类型对应
nil null
string System.String
number System.Double
boolean System.Boolean
table LuaInterface.Table
function LuaInterface.Function

把一个C#方法注册到Lua的一个全局方法

//把一个类中的普通方法注册进去
lua.RegisterFunction("在Lua中的方法名",obj,obj.GetType().GetMethod("C#中的方法名"))
//在Lua中调用
lua.DoString(" 在Lua中的方法名 ");

//把一个类的静态方法注册进去
lua.RegisterFunction("在Lua中的方法名",null,Typeof(类名).GetMethod("C#中的静态方法名"))
//在Lua中调用
lua.DoString(" 在Lua中的方法名 ");

Lua中使用C#类

require"luanet"--加载CLR的类型、实例化CLR对象
luanet.load_assembly("System.Windows.Forms")
Form = luanet.import_type("System.Windows.Forms.Form")--赋值变量到lua中
print(Form)
在lua中使用C#中的类创建对象的时候,会自动分配最合适的构造方法

Lua中访问C#中的属性和方法

Lua代码中,访问C#对象的属性的方式和访问table的键索引一样
obj.name obj["name"]
Lua代码中,访问C#对象的普通函数的方式和调用table的函数一样
对象后加:号,调用前要实例一个对象
obj:method()

Lua中访问C#中方法-特殊情况

lua中的调用和返回值obj:OutMethod(34)
--out参数不需要参数,这个返回一个table,里面的值为{34,34,12}

obj:OutMethod(10,10)
--ref参数需要传入,返回一个table有个两个值(value1,value2)

**lua中默认认为会有返回值,这个值可能是空,接收返回值,空的也得接收完,才能接收到第二个返回值

你可能感兴趣的:(Lua与C#的交互实现)