5

私はLuaにかなり慣れていません。C ++からLua関数を呼び出す方法についていくつかのサンプルコードを見てきましたが、サンプルコードは5.1を使用しており、これを5.2で動作させようとしています。

これが私のコメントとともに問題のサンプルコードです:

lua_State *luaState = luaL_newstate();
luaopen_io(luaState);
luaL_loadfile(luaState, "myLuaScript.lua");
lua_pcall(luaState, 0, LUA_MULTRET, 0);
//the code below needs to be rewritten i suppose
lua_pushstring(luaState, "myLuaFunction");
//the line of code below does not work in 5.2
lua_gettable(luaState, LUA_GLOBALSINDEX);
lua_pcall(luaState, 0, 0, 0);

5.2リファレンスマニュエル(http://www.lua.org/manual/5.2/manual.html#8.3)で、(上記のlua_gettableステートメントの代わりに)レジストリからグローバル環境を取得する必要があることを読みましたが、これを機能させるために必要な変更を理解できません。たとえば、私は試しました:

lua_pushglobaltable(luaState);
lua_pushstring(luaState, "myLuaFunction");
lua_gettable(luaState, -2);
lua_pcall(luaState, 0, 0, 0);
4

1 に答える 1

3

以下のコードは、5.1 と 5.2 の両方で動作するはずです。

lua_getglobal(luaState, "myLuaFunction");
lua_pcall(luaState, 0, 0, 0);

luaL_loadfileただし、との戻りコードを必ずテストしてlua_pcallください。を使用したほうがよいでしょうluaL_dofile

于 2013-03-05T12:27:21.953 に答える