私はlua 5.1を使用していますが、C++から呼び出せる関数をロードするためにluaを使用しています。lua_pcallで呼び出されたlua関数のエラーメッセージが失われました
int Error = luaL_loadfile(LuaState, "Test.lua");
if(!Error)
{
Error = lua_pcall(LuaState, 0, LUA_MULTRET, 0);
}
if(Error)
{
std::cerr << "-- " << lua_tostring(LuaState, -1) << std::endl;
lua_pop(LuaState, 1);
}
else
{
LuaStackBalancer LSB(LuaState); //Puts the Lua Stack back to the way it was found
lua_pushstring(LuaState, "Run");
lua_gettable(LuaState, LUA_GLOBALSINDEX);
if(lua_isfunction(LuaState, -1))
{
if(lua_pcall(LuaState, 0, 0, 0))
{
std::cerr << "-- " << lua_tostring(LuaState, -1) << std::endl;
}
}
}
問題は、私はC++から呼び出すLuaの関数はエラーを出し、その後の復帰がその関数の代わりに、エラーメッセージの最初の引数である別の関数を呼び出す場合。
として定義AlwaysErrorsOut:うち
--Test.lua
AlwaysErrorsOut("Weirdness is happening")
:
int AlwaysErrorsOut(lua_State *LuaState)
{
return luaL_error(LuaState, "Error Test Successful");
}
ルア試験1
- Test.lua:1:エラーテスト成功
Luaのテスト2 :
アウト:
- すごみが私の現在の理論は、エラーが発生した後にエラーメッセージがスタックの一番上に配置され、スタックは、その後1
に減少していることであるが起こっています
誰でもエラーメッセージの消失を防ぐ方法を知っていますか?
「AlwaysErrorsOut」のコードを表示できますか? –
int AlwaysErrorsOut(lua_State * LuaState) { \t return luaL_error(LuaState、 "エラーテストに成功"); } – khm