【lua学习】Lua中调用C函数

本文介绍了Lua如何调用C函数,包括C函数作为应用程序的一部分和成为Lua模块两种方式。Lua通过虚拟堆栈传递参数和返回值,C函数必须遵循lua_CFunction类型定义。文章详细阐述了编译和运行过程,以及Lua调用C库的方法。
摘要由CSDN通过智能技术生成

【lua学习】Lua中调用C函数

 Lua利用一个虚拟的堆栈来给C传递值或从C获取值。每当Lua调用C函数,都会获得一个新的堆栈,该堆栈初始包含所有的调用C函数所需要的参数值(Lua传给C函数的调用实参),并且C函数执行完毕后,会把返回值压入这个栈(Lua从中拿到C函数调用结果)。
 于此相关的C API有几个比较重要的定义如下:

1typedef struct lua_State lua_State;

 lua虚拟机(或叫解释器),可以理解为一个thread,和一个完整的Lua虚拟环境的执行状态。

2)typedef int (*lua_CFunction) (lua_State *L);

能够被Lua调用的C函数都必须是这种规则。函数的返回的int值表示C函数返回值的个数。

3)void lua_pushcclosure (lua_State *L, lua_CFunction fn, int n);

将一个C闭包压栈;
首先将upvalues依次压栈,然后调用该函数,将c函数压栈,并将n个upvalues出栈;
  参数fn:C函数指针
  参数n:函数关联的upvalue的个数。

4)void lua_pushcfunction (lua_State *L, lua_CFunction f);

将C函数压栈;
接收一个C函数的指针参数,然后将一个Lua.function类型的对象压栈。

5void lua_register (lua_State *L, const char *name, lua_CFunction f);

注册C函数为一个全局变量;

#define lua_register(L,n,f) (lua_pushcfunction(L, f), lua_setglobal(L, n))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值