Я потратил несколько часов, пытаясь заставить его работать без успеха. У меня есть программа на C ++ с функцией, доступной для скрипта Lua. Скрипт Lua использует его так:
setData('type', {a=1, b=2, c=3})
Итак, первый аргумент - это строка, а второй - таблица.
Моя текущая и лучшая версия функции setData в C ++ выглядит так:
string sType;
map<string, uint8_t> mOptions;
int nArgs = lua_gettop(i_pState);
if (nArgs == 2)
{
if (lua_isstring(i_pState, 1) != 0)
sType = lua_tostring(i_pState, 1);
if (lua_istable(i_pState, 2) != 0)
{
lua_pushnil(i_pState);
while(lua_next(i_pState, 2))
{
uint8_t nValue = uint8_t(lua_tonumber(i_pState, -1));
string sKey = lua_tostring(i_pState, -2);
mOptions[sKey] = nValue;
lua_pop(i_pState, 1);
}
lua_pop(i_pState, 1);
}
}
return 0;
Работает нормально, но вызывает ошибку «program.exe сработала точка останова» в конце, когда вызывается функция lua_close()
.
Что не так с этим кодом?
UPD1. Я не получаю ошибку без обработки второго аргумента.
UPD2. Мой код ведет себя очень странно. Я думаю, что это может быть проблема смешивания extern "C"
и кода C ++.
UPD3. Оказывается, это куча коррупции. Я не могу понять, где причина. Вероятно, это не имеет отношения к Луа вообще.