В C Я хочу вызвать функцию lua myFunction(), которая использует глобальную переменную x. Я хочу иметь возможность зарегистрировать переменную c (integer) непосредственно как эту глобальную переменную x.Bind C Integer to Lua global variable
Что-то вдоль линий:
demo.lua:
function myFunction()
return x + 3
end
demo.c:
int x = 0;
lua_bindglob(L, "x", &x);
for (x = 0; x < 100; ++x)
{
lua_getglobal(L, "myFunction");
// here I call the function and it should evaluate
// to the current value of x (in c)
lua_pcall(L, 0, 1, 0);
int result = lua_tonumber(L, -1);
lua_pop(L, 1);
}
Я знаю, что я могу изменить Lua глобальные переменные следующим образом:
lua_pushnumber(L, 3);
lua_setglobal(L, "x");
Но мне нужно иметь более прямой/более быстрый способ сделать это. Я получил подсказку о том, что LUA ligthuserdata может помочь здесь, но я не мог найти примеров для простых переменных.
EDIT: Поскольку я получаю выражение от ориентира я не хочу, чтобы изменить их: Смотрите примеры here:
Я не знаю, что есть способ сделать прямо то, что вы хотите сделать. Я столкнулся с одной и той же проблемой несколько месяцев назад и закончил работу с таблицей/userdata с метатемой, в которой были метаметоды '__index' и' __newindex', определенные как функции доступа. –
Мое предположение - целое число в Lua является объектом , таким образом, C-код должен иметь возможность видеть и модифицировать внутреннее повторение (может не отображаться в 32-битном int). Если вы измените значение в Lua, новое значение будет иметь новый адрес. Лучшим подходом было бы получить доступ к '' int' через 'FFI' --- интерфейс внешней функции. Это требует, по крайней мере, того, что C-код экспортирует данный элемент данных в качестве символа. Пожалуйста, следуйте http://luajit.org/ext_ffi_tutorial.html –