Я использую lua 5.1 и использую lua для загрузки функций, которые затем могут быть вызваны из C ++.
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;
}
}
}
Проблема в том, что если функция lua, которую я вызываю из C ++, вызывает другуюфункция, которая выдает ошибку, тогда возвращение является первым аргументом этой функции вместо сообщения об ошибке.
AlwaysErrorsOut определяется как:
int AlwaysErrorsOut(lua_State *LuaState)
{
return luaL_error(LuaState, "Error Test Successful");
}
Lua Test 1:
--Test.lua
AlwaysErrorsOut("Weirdness is happening")
Out:
- Test.lua: 1: успешное тестирование на ошибку
Lua Test 2:
--Test.lua
function Run()
AlwaysErrorsOut("Weirdness is happening")
end
Out:
-Происходит странность
Моя текущая теория заключается в том, что после возникновения ошибки сообщение об ошибке помещается поверх стека, а затем размер стека уменьшается до 1.
Кто-нибудь знает, как предотвратить потерюсообщения об ошибке?