c++调用lua注册的带参数的回调

main.cpp

int lua_cb = LUA_REFNIL;
int lua_cb_arg = LUA_REFNIL;
int setcb(lua_State *L)
{
lua_pushvalue(L, -);
lua_callback = luaL_ref(L, LUA_REGISTRYINDEX);
lua_pushvalue(L, -);
lua_cb_arg = luaL_ref(L, LUA_REGISTRYINDEX);
return ;
} int main()
{
lua_State* L = luaL_newstate();
top = lua_gettop(L);
luaopen_base(L);
luaL_openlibs(L); //注册回调
lua_register(L, "setcb", setcb); int ret = luaL_dofile(L, "test.lua");
if(ret != )
{
printf("%s", lua_tostring(L, -));
} //调用回调
lua_rawgeti(L, LUA_REGISTRYINDEX, lua_cb );
lua_rawgeti(L, LUA_REGISTRYINDEX, lua_cb_arg);
lua_call(L, , ); lua_close(L); getchar();
return ;
}

test.lua

local cb_arg = {a=};
setcb(function(_arg)
print("cb' s arg is a table, arg.a=" .. _arg["a"]);
end, cb_arg);
上一篇:精神哥讲Crash(一):UnsatisfiedLinkError


下一篇:JavaBean中set/get的命名规范