C API是一个C代码与Lua进行交互的函数集。他由以下部分组成:读写Lua全局变量的函数、调用Lua函数的函数、运行Lua代码片断的函数、注册C函数然后可以在Lua中被调用的函数等。 当在Lua和C之间交换数据时我们面临着两个问题:动态与静态类型系统的不匹配和自动与手动内存管理的不一致。解决办法是在C和Lua之间通信关键
(); // 打开标准库 luaL_openlibs(L); // 注册 C 函数库 luaopen_my_lib(L); // 注册之后,在Lua脚本中可以直接调用my_c_function方法 // 执行 Lua 脚本,调用 C 函数 const char *script = "print(my_c_function(10))"; // 以Lua的方式调用my_c_function函数,参数为10,并打印返回值 if (...
Lua脚本调用C共享库的最佳方法是通过Lua的C API进行调用。Lua提供了一组C函数和宏,使得在Lua脚本中调用C函数变得简单和高效。 具体的步骤如下: 编写C共享库:首先,需要编写一个C共享库,其中包含了需要被Lua脚本调用的函数。可以使用C语言或C++语言编写这些函数,并将它们编译为共享库文件(.so或.dll文件)。...
lua中调用c函数的时候,先把要传递的参数按顺序压栈,所以我们在c函数中处理的时候要把参数一个一个取出来。比如用math库中很多函数都用luaL_checknumber(lua_State *L, int narg)函数。表示check函数第narg个参数是不是number型的,如果是就返回这个值。类似的函数还有luaL_checkinteger、luaL_checklstring、luaL_c...
Lua 使用一个虚拟栈来和C互传值,也就是说,C和Lua的数据交互是在栈上进行的。 无论何时 Lua 调用 C,被调用的函数都得到一个新的栈, 这个栈独立于 C 函数本身的栈,也独立于之前的 Lua 栈。 它里面包含了 Lua 传递给 C 函数的所有参数, 而 C 函数则把要返回的结果放入这个栈以返回给调用者 。(关键词...
lua语言是c语言实现的,而且是非常轻量级的,非常适合内存受限的嵌入式产品 c调用lua,需要在c程序中模拟出lua解释器环境,所以需要调用lua的函数,即生成c程序必定要链接lua库,lua解释器和C是通过一个虚拟栈来交换数据的 栈的大小可以设置,通过查看lua的源码,可以知道这个栈的大小,在luaconf.h的LUAI_MAXSTACK,还可以通...
Lua调用C程序以及so程序 这篇博客介绍了lua代码调用C程序代码的方式。 https://chsasank.com/lua-c-wrapping.html 总结: 在C代码中需要引入lua状态机等库函数,并填写接口到函数的映射关系。 编译该C代码文件,生成so包后,lua就能引入相关包。 对于sinTest.c代码文件(内容如下所示),通过如下命令生成so包:...
Lua调用这个函数如果需要返回结果时,这个函数内部需要把结果依次入栈并返回结果的数目。 比如我们期待my_sin可以得到一个输出,因此在l_sin内部使用了 lua_pushnumber(L, sin(d));将结果入栈,并通过return 1告知Lua my_sin是返回一个结果的 由此可见lua_CFunction的int返回值是用来告知Lua该函数的返回值的个数的...
通过alien调用c库的方法: alien = require("alien_c") --1.加载alienlibc = alien.load("*.so") -- 2.加载动态链接库so,dll都可以libc.hello:types("string","string") -- 3.说明参数类型:例如输入一个json,返回一个jsonin_json=""out_json="ret"out_json=libc.hello(in_json) -- 调用print(ou...