辅助库也提供了一个高层函数来检查找空间:void lual_checkstack (lua_State *L, int sz, const char *msg);该函数类似于函数lua_checkstack,但如果栈空间不能满足请求会使用指定的错误信息抛出异常而不是返回错误码。 19.2.2查询元素 (1)C API使用索引来引用栈中的元素。第一个被压入栈的元素索引为1,第二...
luaL_checkversion(L); lua_newlibtable(L, mylib); lua_setfuncs(L, mylib, 0); 1. 2. 3. 其中luaL_checkversion 函数会导致在 lua 解释器程序中无法加载正常 c 模块,会出现multiple Lua VMs detected错误,这是打开了两个 lua 环境造成的;所以如果要导出供纯 lua 程序使用的 c 模块,要把 luaL_check...
luaL_register(L,"myLualib", myLualib_lib); return1; } /*5.4.x int luaopen_myLualib(lua_State *L) { luaL_Reg l[] = { { "test1", ltest1 }, { "test2", ltest2 }, { "test3", ltest3 }, { NULL, NULL }, }; luaL_newlib(L, l); return 1; } luaL_register现在已经弃用...
luaL_newlib在栈中创建一个table,将mylib数组中的C函数注册进这个table中。luaopen_mylib将这个table中的函数加载进lua环境中。 附加: 1、每一个与Lua通信的C函数都有其独有的虚拟栈。 2、在极端情况下,打印指定目录中文件的例子可能会造成小小的内存泄漏。在内存空间不足的情况下,l_dir()中的lua_newtable(...
int luaopen_mylib(lua_State *L) { luaL_newlib(L,reg); return 1; } 对函数luaL_newlib的调用会新创建一个表,并使用由数组reg指定的“函数名-函数指针”填充这个新创建的表。当luaL_newlib返回时,它把这个新创建的表留在了栈中。然后,函数 luaopen_mylib返回1,表示将这个表返回给lua。 2.2.6、boolea...
luaL_newlib(L,luaLoadFun);return1; } 编译上面这个luaLoad.c文件为luaLoad.so文件 gcc luaLoad.c -fPIC -shared -o luaLoad.so -I/home/ubuntu/Downloads/lua-5.3.4/src -I后面是lua的安装路径,里面包含了上面include的那几个头文件 --testModule.lua测试调用上面两个模块localluaLoad =require"luaLoad...
luaL_newlib(L, dblib); return 1; } 可以看到,调试库的debgu.sethook()函数最终也是调用基础API函数:lua_sethook()。 在后面的调试器开发讲解中,我就是用debug库来实现一个远程调试器。 3. 获取程序内部信息 在钩子函数中,可以通过如下API函数还获取程序内部的信息了: ...
luaL_openlibs(L);//打开以上所有的lib intvalueCPP=1; // 将a值压入栈顶 lua_pushnumber(L,valueCPP); // 命名栈顶的值 lua_setglobal(L,"valueCPP"); stringstr; while(true) { cout<<"输入lua文件路径:"<<endl; getline(cin,str,'\n'); ...
intluaopen_Test(lua_State*L){// lua 脚本可调用的函数名接口luaL_Reglibs[]={#define ENTRY(name) { #name, LTest_##name }ENTRY(toutf8),ENTRY(initssl),#undef ENTRY{NULL,NULL}};#if LUA_VERSION_NUM >= 502luaL_newlib(L,libs);#elselua_newtable(L);luaL_register(L,NULL,libs);#endif...
标准库:Lua语言也包含标准库(io, math, string等),不过语言设计者为了保证Lua尽量的小,这些标准库是独立分开的。如果应用不需要用到这些标准库可以不需要加载,如果需要则可以通过luaopen_io等方法加载具体的库,或者>=5.1版本时通过luaL_openlibs来加载所有标准库。