函数原型: voidluaL_setfuncs(lua_State *L, const luaL_Reg *l, int nup); 文档定义: Registers all functions in the array l (see luaL_Reg) into the table on the top of the stack (below optional upvalues, see next). When nup is not zero, all functions are created sharing nup upvalues,...
Lua将这个函数实现为宏#define luaL_newlibtable(L,lib) 。这个宏只是为库创建一张新表(该表预先分配的大小等同于指定库中函数的数量)。然后,函数luaL_setfuncs将列表lib中的函数添加到位于栈顶的新表中。 (3)函数luaL_setfuncs(L,lib,nup)将lib中所有的函数注册到栈顶的表中,若nup不为零,所有的函数都共享n...
//3. 在luaL_setfuncs的调用中,其第二个参数为待注册函数的数组。 //4. 需要强调的是,所有需要用到"xxx"的代码,不论C还是Lua,都必须保持一致,这是Lua的约定, // 否则将无法调用。 int luaopen_mytestlib(lua_State* L) { const char* libName = "mytestlib"; luaL_register(L, libName, mylibs);...
在开始之前,我们需要了解,lua5.1之后,lual_register()就被舍弃了,使用 lua_newtable(L); luaL_setfuncs(L, myLib, 0); 一起使用来进行替代。 为了大家能够更深的理解,对于Windows下的lua调用C/C++模块,我们采用了lua5.1版本的方式,也就是使用lual_register()来进行测试; 在Linux环境下,我们采用lua5.2版本(即...
在看openwrt的uci的代码时看到为兼容lua5.1实现的luaL_setfuncs(注册一个函数到lua中)函数, 涉及到了闭包, 所以学习一下 staticvoidluaL_setfuncs(lua_State*L,constluaL_Reg*l,intnup){luaL_checkstack(L,nup+1,"too many upvalues");/* 调整栈的大小 */for(;l->name!=NULL;l++){inti;lua_pushstring...
luaL_newlib(L, registerInfo);//上面一行等同于下面两行//luaL_newlibtable(L, registerInfo);//luaL_setfuncs(L, registerInfo, 0);return1; } 见如下Lua代码: require"CLibraryForLua"--指定包名称--在调用时,必须是package.functionprint(CLibraryForLua.add(1.0,2.0))print(CLibraryForLua.sub(20.1,19...
05 luaL_setfuncs(L, mylib, 0);//声明Lua接口函数 06 luaL_dostring(L, LUA_SCRIPT_GLOBAL);//运行解析出来的用户Lua脚本 07 lua_close(L);//关闭Lua虚拟机 08 } 以下是声明Lua接口函数,声明后的Lua接口函数会注册在Lua全局表中,形成了Lua全局表的另一部分。这些接口函数其实是在C中定义的,在运行Lua脚...
11、luaL_setfuncs(L, narr, nrec) 参数解释: L:虚拟机 narr:Table中数组部分预分配元素数量 nrec:Table中哈希部分预分配元素数量 返回: void 执行细节: ①:创建一个table,数组部分预分配narr个元素,哈希部分预分配nrec个元素 ②:将table压入栈顶
这是给 luaL_setfuncs 一起用的 (参见 luaL_newlib)。 它以宏形式实现, 数组 l 必须是一个数组,而不能是一个指针。 luaL_newmetatable# [-0, +1, e] int luaL_newmetatable (lua_State *L, const char *tname); 如果注册表中已存在键 tname,返回 0 。 否则, 为用户数据的元表创建一张新表。
lua-5.1 和 lua-5.2 之间的一些差异。 1. luaL_register 2 luaL_setfuncs lua5.1 之中有一个luaL_register,用于把luaL_Reg 数组中的所有函数注册到lua中。但在lua5.2中已经不支持这一函数了, lua5.2的手册中建议使用luaL_setfuncs来替代luaL_register. ...