При разборе переменных из lua lua ведет себя странно.
C++:
int LuaManager::SetTimer(lua_State *pLua)
{
if (!lua_isstring(pLua, 0)) throw "expected: string";
if (!lua_isnumber(pLua, 1)) throw "expected: number";
std::string callback = lua_tostring(pLua, 0);
double delay = lua_tonumber(pLua, 1);
Timer timer = Timer(callback, delay);
return 0;
}
Луа:
SetTimer("Durp", 10);
Я получаю «исключение первого шанса в 0x76C44598: исключение Microsoft C++: char в ячейке памяти 0x00D7F588» из строки
std::string callback = lua_tostring(pLua, 0);
Когда я отлаживаю код и нажимаю «Продолжить», когда появляется исключение, оно бросает случайные переменные в переменную. То же самое касается double delay
.
Однако когда я говорю:
std::string callback = lua_tostring(pLua, -2);
double delay = lua_tonumber(pLua, -1);
Он по-прежнему будет выдавать исключение, но будут добавлены правильные переменные.
LUA_USE_APICHECK
. - person greatwolf   schedule 19.01.2015