• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

LUA Userdata

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

1 lua中, userdata存在栈上元素里的只是指针, 他们都会在生命周期结束后被垃圾回收

2 userdata也可以关联元表,不过只能通过luaL_newmetatable创建的元表

3 如果你的userdata关联了一些用户数据,需要userdata失效时也清理掉,那附加的元表可以设置__gc

int __lua__call(lua_State* L)

{

//
//栈底是userdata,上面是参数如果有的话, 普通的C函数调用栈只有参数
//

    printf("hello lua userdata called!\n");

    return 0;

}

 

int __lua__gc(lua_State* L)

{

    printf("hello lua gc called!\n");

    return 0;

}

 

 

void testmatetable()

{

    lua_State *L;

 

    L = luaL_newstate();

    luaL_openlibs(L);

 

    lua_register(L, "sleep", sleep_c);

 

 

    luaL_newmetatable(L, "lua.userdata.metatable");

    lua_pushliteral(L,"__call");

    lua_pushcfunction(L, __lua__call);

    lua_settable(L,-3);

 

    /*

    //

    //创建__gc

    //

    lua_pushliteral(L,"__gc");

    lua_pushcfunction(L, __lua__gc);

    lua_settable(L,-3);

    */

 

    lua_pop(L, 1);

 

    //

    //int lua_setmetatable (lua_State *L, int index);  给LUA值设置metatable

    //metatable存放在栈顶,LUA值通过index指出

    //

 

    //

    //创建userdata并关联metatable

    //

    //unsigned int* fidptr = (unsigned int *)lua_newuserdata(L, sizeof(unsigned int));

    //*fidptr = 998;

    //

    //值关联数字的话可以用lua_pushlightuserdata

    //

    lua_pushlightuserdata(L, (void*)998);

 

 

 

    luaL_getmetatable(L, "lua.userdata.metatable");

    lua_setmetatable(L, -2);

    //

    //现在栈顶上就只有创建的userdata了,把它设置到全局变量里面这样LUA能正常访问

    //

    //

 

 

   

    lua_setfield(L, LUA_GLOBALSINDEX, "hellouserdata");

 

   

    //

    //.test

    //

    luaL_loadstring(L, "hellouserdata (1,2,3); sleep(2000)");

 

    lua_call(L,0,0);

 

    lua_close(L);

   

}

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
lua 打印 table 拷贝table发布时间:2022-07-22
下一篇:
Lua C API发布时间:2022-07-22
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap