【Lua 语言】Lua 调用 C 函数

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

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[] =  
{  
    { "plus_one", l_plus_one },
    { NULL, NULL }
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值