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