uLua中遇到的问题

1.C#调用lua函数参数为空的问题函数

在C#中调用以(:)定义的函数传参时,self被第一个参数覆盖,而obj将为空lua

MessagePanel = {};

function MessagePanel:Test1(obj)
	--lua调用正常,obj为传入参数,self为MessagePanel自己
	--C#调用异常,obj为空,self为传入的参数,
	print(type(obj)..type(self))
end

function MessagePanel.Test2(obj)
	--lua和C#调用都是正确的
	print(type(obj))
end



2.C#调用不到Lua父类函数的问题spa

在Lua中调用table的元表函数是能够的。.net

在C#中调用Lua中table的元表函数是找不到的。code


3.Lua中调用不到C#对象的父类函数对象

问题缘由,ip

由于父类没有生成wrapget

解决办法,string

生成全部父类的wrap,注意中间不能间断(父类的父类都须要);it


3.Lua中调用不到C#重载函数

问题缘由,

在C#中一个类里面有一个没有参数的类成员函数和一个有一个参数的同名静态函数,在这种状况下wrap的生成就会有问题,先上代码

原函数

public Type GetType();
public static Type GetType(string typeName);

生成的wrap函数

static int GetType(IntPtr L)
 {
  int count = LuaDLL.lua_gettop(L);

  if (count == 1)       //注意本行
  {
   Type obj = LuaScriptMgr.GetTypeObject(L, 1);
   Type o = obj.GetType();
   LuaScriptMgr.Push(L, o);
   return 1;
  }
  else if (count == 1 && LuaScriptMgr.CheckTypes(L, 1, typeof(string)))    //注意本行
  {
   string arg0 = LuaScriptMgr.GetString(L, 1);
   Type o = Type.GetType(arg0);
   LuaScriptMgr.Push(L, o);
   return 1;
  }

代码只贴了有用的部分

由于静态函数不用传递调用对象,成员函数须要传递调用对象,因此他们两个的传入参数个数都是1

从判断语句上看这个第二个判断将永远没法进入因此这个静态函数也就没法调用了

解决办法,

a.若是是本身写的代码尽可能避开这种写法;

b.若是是SDK的写法找一下有没有其余的相同重载函数;

c.若是a,b都没法解决。。就手动修改这个判断把第一个判断和第二个判断对掉顺序;



4.Lua中报错  function at line xxx has more than 60 upvalues


function at line xxx has more than 60 upvalues。lua的upvalue是有上限的,这个上限定义在luaconf.h中:


/*
@@ LUAI_MAXUPVALUES is the maximum number of upvalues per function
@* (must be smaller than 250).
*/
#define LUAI_MAXUPVALUES    60

固然不建议修改这个值而后从新编译lua了,若是local变量太多,仍是放到table里面吧。

luaconf.h中还定义了其余的一些上限,好比这个:

/*
@@ LUAI_MAXVARS is the maximum number of local variables per function
@* (must be smaller than 250).
*/
#define LUAI_MAXVARS        200

相关文章
相关标签/搜索