Lua如何将userdata从元表索引放入C闭包?
我有创建用户数据和小图元表的功能Lua如何将userdata从元表索引放入C闭包?,c,lua,closures,metatable,C,Lua,Closures,Metatable,我有创建用户数据和小图元表的功能 static int index_lua(lua_State *L){ uint32_t * x; x = lua_touserdata(L, 1); printf("Buff __index ADDR: %08X\r\n", x); return 0; } static int gc_lua(lua_State *L){ printf("Buff GC!\r\n"); r
static int index_lua(lua_State *L){
uint32_t * x;
x = lua_touserdata(L, 1);
printf("Buff __index ADDR: %08X\r\n", x);
return 0;
}
static int gc_lua(lua_State *L){
printf("Buff GC!\r\n");
return 0;
}
static int create_buff(lua_State *L){
uint32_t * x;
x = (uint32_t *) lua_newuserdata(L, 512);
printf("BUff ADDR: %08X\r\n", x);
*x = 0;
lua_newtable(L);
lua_pushcfunction(L, index_lua);
lua_setfield(L, -2, "__index");
lua_pushcfunction(L, gc_lua);
lua_setfield(L, -2, "__gc");
lua_setmetatable(L, -2);
return 1;
}
我想在索引中创建新的C函数,并将userdata放入他的闭包(upvalue),但我无法理解它是如何实现的。我可以把一个指针指向userdata。但我认为这是个坏主意,因为Lua在垃圾收集时可以删除userdata,如果他不知道在某些函数中使用的是什么用户数据。需要从堆栈中删除函数索引的第二个参数,在关闭堆栈的一个元素后,它将是userdata
static int index_lua(lua_State *L){
uint32_t * x;
x = lua_touserdata(L, 1);
printf("Buff __index ADDR: %08X\r\n", x);
lua_pop(L,1); // Remove second param __index
lua_pushcclosure (L, test, 1); // put on stack 1 element of stack
return 1;
}
需要从堆栈中删除函数_索引的第二个参数,在out之后关闭堆栈的一个元素,它将是一个userdata
static int index_lua(lua_State *L){
uint32_t * x;
x = lua_touserdata(L, 1);
printf("Buff __index ADDR: %08X\r\n", x);
lua_pop(L,1); // Remove second param __index
lua_pushcclosure (L, test, 1); // put on stack 1 element of stack
return 1;
}