私は lua と C との対話の基本を知っており、現在 c++ で lua の次の行を実行しようとしています。
Func1():Func2().Table1.value1
「value2」の値を取得して、C プログラムで使用しようとしています。以下は、C でこの値を取得するために私が書いたコードです。
int GetNumber()
{
int retn = 0;
g_clientlua.lua_getfield(LUA_REGISTRYINDEX, "Player");
g_clientlua.lua_getfield(-1, "Func2");
g_clientlua.lua_getfield(LUA_GLOBALSINDEX, "Func1");
g_clientlua.lua_call(0, 1);
g_clientlua.lua_call(1, 1);
if (g_clientlua.lua_isnil(-1))
return retn;
g_clientlua.lua_getfield(-1, "Table1");
if (g_clientlua.lua_isnil(-1))
return retn;
g_clientlua.lua_getfield(-1, "value1");
if (g_clientlua.lua_isnil(-1))
return retn;
retn = (int)g_clientlua.lua_tointeger(-1);
}
clientlua は、基本的に lua_* 関数と同等のメソッドを呼び出し、lua_state ポインター パラメーターを lua 状態へのポインターであるメンバー変数で満たすメソッドを呼び出すことを可能にするオブジェクトです。
これを呼び出すたびに、lua スタック リークを引き起こしていると不平を言います。これを解決するためlua_pop(3)
に、最後に a を追加しようとしましたが、エラーを報告せずにプログラムがクラッシュするだけなので、何か間違ったことをしていると思います。
誰かが私に何か知恵の言葉を持っていますか? ここでちょっと負けました。上記のコードが適切に記述されているとは思えませんが、上記の lua 呼び出しを C でどのように記述すればよいでしょうか?