Lua 一些小知识(二)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sky1466181491/article/details/79385613

1)Lua中访问C#中的属性跟方法
require "luanet"
luanet.load_assembly("System")
Int32 = luanet.import_type("System.Int32")
num=Int32.Parse(1234)--call the method in csharpClass
print("Num is",num)

print(Int32)


2)在C#中执行Lua脚本文件,或者脚本字符串

在C#中编写Lua脚本:

 lua解释器:

     Lua  lua=new Lua();

声明变量:

     lua.DoString(str="siki是个傻孩子");

 

注:在C#中可以使用return返回lua中的值

例:

   lua.DoString(return str)//str是lua中的一个变量名

 

执行文件:

     lua.DoFile(Lua文件名.lua)

注:Lua语言的编码格式是ANSI否则在C#中会出错

3)    把一个C#方法注册进Lua的一个全局方法

把一个C#方法注册进Lua中:
普通方法:
    lua.RegisterFunction("在lua中显示的方法名",注册的对象,注册的对象的方法)

例:

lua.RegisterFunction("LuaFunction",obj,obj.GetType().GetMethod("注册的方法名"))

()");

静态方法:
   lua.RegisterFunction("在lua中显示的方法名",null,typeof(静态对象).GetMethod("静态方法名"))
例:
lua.RegisterFunction("LuaStaticFunction",null,typeof(MyClass).GetMethod("注册的静态方法名")
()");

4)在Lua中使用C#代码:

   require:   // 引入C#中的动态链接库


注:luanet要放在C#工程的输出目录下

5)在Lua中访问C#的属性跟方法

Lua代码中,访问C#对象的属性的方式和访问table的键索引一样,比如obj.name 或者 obj["name"]

 Lua代码中,访问C#对象的普通函数的方式和调用table的函数一样,比如obj:method1()

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

当函数中有out或ref参数时,out参数和ref参数和函数的返回值一起返回,并且调用的时候,out参数不需要传入
C#函数定义
class Obj{
int OutMethod1(int parameter1,out parameter2,out parameter3){
parameter2=34;parameter3=213;
return parameter1;
}
int OutMethod2(int parameter1,ref parameter2){
parameter2=parameter2+2;
return parameter1+parameter2;
}

}

当有重载函数的时候,调用函数会自动匹配第一个能匹配的函数
可以使用get_method_bysig函数得到C#中指定类的指定参数的函数用法

luaMethod = get_method_bysig(Obj,"CSharpMethod","System.String")

luaMethod("ABC")

6)Lua注册C#中事件委托(event delegate)

在Lua中通过Add方法或者Remove方法把一个Lua的函数注册或者注销从C#中的事件委托中

function method()

end

obj.SomeEvent:Add(methodname(不用带引号))

猜你喜欢

转载自blog.csdn.net/sky1466181491/article/details/79385613