uLuaで遭遇した問題

1981 ワード

1.C#呼び出しlua関数パラメータが空の問題
C#で(:)で定義された関数パラメータを呼び出すとselfは最初のパラメータで上書きされ、objは空になります.
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親関数が呼び出されない問題
Luaでtableのメタテーブル関数を呼び出すことは可能です.
C#でLuaでtableを呼び出すメタテーブル関数は見つかりません.
3.LuaでC#オブジェクトが呼び出されない親関数
問題の原因は、
親クラスがwrapを生成していないため
解決策、
すべての親のwrapを生成し、中間が途切れないことに注意します(親の親が必要です).
3.LuaでC#リロード関数が呼び出されない
問題の原因は、
C#の中の1つのクラスの中で1つのパラメータのクラスのメンバーの関数と1つのパラメータの同名の静的な関数があって、このような情況の下で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.GetType Object(L,1);Type o=obj.GetType();LuaScriptMgr.Push(L,o);return 1;}else if(count==1&&LuaScriptMgr.CheckType(L,1,typeof(string))//注意本行{string arg 0=LuaScriptMgr.GetString(L,1);Type o=Type.GetType(arg 0);LuaScriptMgr.Push(L,o);return 1;  }
コードは役に立つ部分だけ貼ってあります
静的関数は呼び出しオブジェクトを渡す必要がなく、メンバー関数は呼び出しオブジェクトを渡す必要があるため、両方の入力パラメータの数は1です.
判断文から見るとこの2番目の判断は永遠に入らないので、この静的関数は呼び出せません.
解決策、
a.自分で書いたコードなら、できるだけこの書き方を避ける.
b.SDKの書き方であれば、他に同じリロード関数があるかどうかを探します.
c.a,bともに解決できない.のこの判断を手動で修正して1番目の判断と2番目の判断を順番に合わせる.
4.Luaで誤報function at line xxx has more than 60 upvaluesfunction 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