Я изо всех сил пытаюсь найти и понять, как передать таблицу с lua на c ++
Что я имею:
Lua File:
-- lua script for sending table data
io.write("lua table to send")
tableexample = {x = 1, y = 2, z = 100}
return tableexample
сторона c / c ++
L = lua_open();
luaL_openfile(L, "luafile");
... call the function...
luaLdofile(L, luafile);
int result;
result = lua_pcall(L,0, LUA_MULTRET,0);
if(result){
fprintf(stderr, "failed %s\n", lua_tostring(L,-1));
if(lua_istable(L,-1)){
lua_gettable(L,-1);
x = lua_tonumber(L,-2);
y = lua_tonumber(L,-3);
z = lua_tonumber(L,-4);
}
else
printf("fail");
результат возвращается с ошибкой «попытка вызвать табличное значение»
Я просмотрел много разных учебников / примеров, но не нашел простого учебника, в котором не было бы 100 других вещей, и я запутался
некоторые ссылки, которые похожи — но слишком сложны для того, что я ищу
Итерация по таблице Lua из C ++?
Ваше использование lua_gettable
неправильно.
Посмотрите на Руководство Lua:
void lua_gettable (lua_State *L, int index);
Помещает в стек значение
t[k]
, гдеt
это значение на
данный индекс иk
это значение в верхней части стека.Эта функция извлекает ключ из стека (помещая полученное значение
на своем месте).
В вашем примере значение в верхней части стека — это сама таблица, поэтому вы делаете эквивалент tableexample[tableexample]
уважать.
Самый короткий способ достичь того, что вы хотите, это использовать lua_getfield
вместо этого, что позволяет получить доступ к элементам таблицы с помощью строковых ключей:
lua_getfield(L, -1, "x");
В качестве альтернативы сначала поместите значение Lua типа string в стек и используйте lua_gettable
для поиска.
lua_pushliteral(L, "x");
lua_gettable(L, -2);
Не забудьте сохранить свой стек сбалансированным. Каждое значение, которое вы помещаете в стек, должно быть правильно отображено. Руководство Lua определяет, как каждый вызов API изменяет стек с помощью чисел в \[ \]
скобки справа от названия каждой функции.