c++ lua error on setting global variable -
i have folowing code:
lua_state *lua; lua = lua_open(); lual_openlibs(lua); std::string code = "print(gvar)\n" "function test()\n" "print(gvar)\n" "end\n"; if(!lual_loadstring(lua, code.c_str())){ if (lua_pcall(lua, 0, 0, 0)){ const char* error = lua_tostring(lua, -1); lua_pop(lua, 1); } } lua_pushstring(lua, "100"); lua_setglobal(lua, "gvar"); if (lua_pcall(lua, 0, 0, 0)){ const char* error = lua_tostring(lua, -1); // returns "attempt call nil value" lua_pop(lua, 1); } lua_close(lua); calling functions , getting global variables works fine, when try set global variable "attempt call nil value". , cant understand why that?
if(!lual_loadstring(lua, code.c_str())){ if (lua_pcall(lua, 0, 0, 0)){ const char* error = lua_tostring(lua, -1); lua_pop(lua, 1); } } this code loads string anonymous function using lual_loadstring(), puts on stack , executes function using lua_pcall(lua, 0, 0, 0).
lua_pushstring(lua, "100"); lua_setglobal(lua, "gvar"); if (lua_pcall(lua, 0, 0, 0)){ const char* error = lua_tostring(lua, -1); // returns "attempt call nil value" lua_pop(lua, 1); } this piece of code pushes string onto stack sets global variable gvar. there should nothing on stack after call lua_setglobal(). var there.
now after try call function @ top of stack lua_pcall, stack empty - that's why attempt call nil value message.
Comments
Post a Comment