我使用的是lua 5.1,我使用lua加載了可以從C++調用的函數。lua函數調用lua_pcall geting失敗的錯誤消息
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定義爲:
int AlwaysErrorsOut(lua_State *LuaState)
{
return luaL_error(LuaState, "Error Test Successful");
}
的Lua測試1:
--Test.lua
AlwaysErrorsOut("Weirdness is happening")
輸出:
- Test.lua:1:錯誤測試成功
的Lua試驗2 :
--Test.lua
function Run()
AlwaysErrorsOut("Weirdness is happening")
end
輸出:
- 怪誕正在發生
我當前的理論是,後錯誤發生錯誤信息被放置在堆棧的頂部,然後將堆疊被減少到1。
任何人都知道如何防止錯誤信息的丟失?
你能展示'AlwaysErrorsOut'的代碼嗎? –
int AlwaysErrorsOut(lua_State * LuaState) { \t return luaL_error(LuaState,「Error Test Successful」); } – khm