Lua是一门嵌入式语言,提供了完备的 C API 方便 Lua 代码和其他宿主程序相互调用来扩展程序功能。在C中嵌入Lua脚本可以让用户在不重新编译代码的情况下只修改Lua代码来更新程序。在Lua中调用C函数则可以提高程序的运行效率。
操作环境:根据自己使用的环境来配置lua.(这里使用Win + VS,Lua 使用5.3版本)
- 理解C API:Lua和C交互的部分称为C API。C API是一个C代码与Lua进行交互的函数集。在C/C++中使用Lua C API 时,需要引入的Lua头文件:
- lua.h:主要包含Lua的基础函数,以 lua_ 开头
- lauxlib.h:(lua auxiliary library 即lauxlib)主要包含Lua的辅助函数,以 luaL_ 开头
- lualib.h:主要包含Lua打开内置库的函数
- 理解Lua堆栈:Lua和C之间通过一个抽象的Lua栈(lua_State *L)来进行数据交换,Lua和C之间的相互调用,即是通过Lua C API 来对Lua栈进行操作。
- Lua代码中,严格遵守Lua栈的LIFO原则,只能操作栈顶元素
- C代码中,可以操作Lua栈中任意元素,即可以在栈的任意位置删除和插入元素
- Lua栈中可以存放各种类型的变量,例如number、string、函数、线程等
C调用Lua
在C代码中调用Lua的基本流程为:
- 引入Lua头文件
- 创建Lua栈
- 打开所需的Lua库
- 加载Lua代码
- 执行Lua代码
- 获取Lua代码执行结果
- 关闭Lua栈
Lua调用C
通过在C中注册函数给lua调用
封装成c动态链接库,在lua中require
在LuaJIT里面可以使用ffi高性能的调用C
REF
博客: