-- d中包含两个string-value键值对,3个数字下标的整数,1个函数
d = {
f1 = 12, f2 = 34,
1, 2, 3,
add = function(self, a, b)
print('d.add called')
return a + b
end
}
c#中:
//映射到class
public class DClass
{
public int f1;
public int f2;
}
DClass d0 = luaenv.Global.Get<DClass>("d");//映射到有对应字段,by value。d0.f1 = 12; d0.f2=34
//映射到interface
[CSharpCallLua]
public interface ItfD
{
int f1 { get; set; }
int f2 { get; set; }
int add(int a, int b);
}
ItfD d3 = luaenv.Global.Get<ItfD>("d"); //映射到interface实例,by ref。注意接口要注明[CSharpCallLua]。d3.Add(6,7)会调用d.Add(6,7)
//映射到dictionary
Dictionary<string, double> d1 = luaenv.Global.Get<Dictionary<string, double>>("d");//映射到字典,by value。d1["f1"]=12; d1["f2"]=34
//映射到List
List<double> d2 = luaenv.Global.Get<List<double>>("d"); //映射到列表,by value。d2[0]=1,d2[1]=2,d2[2]=3
//映射到Luatable(Xlua提供的)
LuaTable d4 = luaenv.Global.Get<LuaTable>("d");//映射到LuaTable,by ref。d4.Get<int>("f1")将返回12
lua函数传入参数个数不定的映射
void funcCS(int a, params string[] strs);
funcCS(1,"a","b","haha");
lua中:
function funcLua(a, ...)
funcLua(1,"a","b","haha")
lua函数返回参数有多个的映射
参考Examples里面的CSCallLua.cs。
[CSharpCallLua]
public delegate int FDelegate(int a, string b, out DClass c);
public class DClass
{
public int f1;
public int f2;
}
FDelegate f = luaenv.Global.Get<FDelegate>("f");
int f_ret = f(100, "John", out d_ret);
//f_ret = 1 ; d_ret.f1=1024; d_ret.f2 = 0(默认值)
lua中:
function funcLua(a, b)
print('a', a, 'b', b)
return 1, {f1 = 1024} -- 1将会映射到c#函数的返回值,后面的映射到out参数
end