Lua 提供了调用 C 函数的接口,这样我们可以开心地用 C 来写一些底层的代码供 Lua 调用了。这里将整个流程整理一下。
1. 在 C 模块定义好函数
新建 C 源文件,将需要被 Lua 调用的函数实现一下,这里实现一个简单的传值函数。
/**
* 简单地对传入参数加 1,并返回结果
*/
int l_plus_one(lua_State *L)
{
// 获取函数参数:从栈底取一个参数
long long k = lua_tointeger(L, 1);
// 函数主体:做加 1 操作
++k;
// 函数结果返回:将结果压进栈顶
lua_pushinteger(L, k);
// 函数结果返回:表示在从栈顶算起,有 1 个值是返回值
return 1;
}
上面有几点需要注意
* 函数的原型是固定的:int (*l_func)(lua_State*)
* 返回类型为 int,表示在 lua 中调用该函数时获得的返回值个数
* 函数参数 lua_State,lua 和 C 通信时用到的上下文
* lua 模块在调用的 C 函数时,每一个函数都分配了一个在 C 和 Lua 之间传递参数的栈,用作参数和返回值传递用。
2. 在 C 模块导出该函数
假设我们的 C 模块文件名叫做 mylib
/**
* 函数集的结构体
*/
struct luaL_Reg funcs[] =
{

本文介绍了如何使用 Lua 调用 C 函数,包括在 C 模块定义函数、导出函数以及在 Lua 中调用的详细步骤。在 C 模块中,定义了固定原型的函数,并通过 luaopen_mylib 函数将其导出。在 Lua 侧,通过加载动态库并调用 luaopen_mylib 实现函数的调用。

2894

被折叠的 条评论
为什么被折叠?



