Не знаю, как спросить, так голые со мной пожалуйста :)Сохранить ссылку на UserData Lua в
# 1 Lua:
local test = Test();
# 2 C:
//creating "lua's test"
luaL_newmetatable(L, "someTable");
lua_userdata *userData = (lua_userdata *)lua_newuserdata(L, sizeof(lua_userdata));
luaL_getmetatable(L, "someTable");
lua_setmetatable(L, -2);
# 3 Lua :
function test.newMethod()
end
# 4 C:
//this part is not executed from Lua
//what i have to have here from #2 to call "test.newMethod" and how to call it?
//if userdata would be on stack i guess i could:
luaL_getmetafield (L, 1, "newMethod");
lua_call(L, 0, 0);
//but because this part is not executed by Lua call its not on stack.
Отредактировано:
будет пытаться объяснить проще в псевдокоде:
Lua:
local test = Object();
C:
int Object(){
...
somePointer = luaL_newmetatable(...); //how to get this "somePointer"? maybe luaL_ref?
push ...
}
Lua: делает новый метод
function test.newMethod()
...
end
В C какое-либо событие (позволяет говорить таймер) вызывает метод C
void triggeredCMethod(){
//here i need to call test.newMethod
//if i would have here 'somePointer' and could push it to Lua stack i could find and call newMethod
}
так вопрос: как в C-магазине указатель на какой-либо объект Lua (надеюсь, что мне нужно это), получить объект Lua тем указатель и вызов метода в его
Позвольте мне посмотреть, есть ли у меня это право. У вас есть функция, определенная в Lua, и вы хотели бы передать ей аргумент userdata, который вы создали в C. Некоторое произвольное количество времени может проходить между вами при создании этих пользовательских данных и когда вам нужно их использовать. просто вставьте его в стек Lua, как только он будет создан. Точная? –
и ваш вопрос? –