Lua调用c模块

一、lua调用c模块总结
1.c函数库成为lua的一个模块
主要做法:将包含c函数的代码生成库文件 linux下是.so  windows下是.dll 
          同时拷贝到lua运行环境的bin下(由于我用的是LuaTool运行环境 所以放在bin下 程序运行默认从bin下找)
          这样lua解析器才可以找到.dll文件 
2.编写c模块
  (1)先编写需要注册的c函数 这些c函数用统一的声明并且必须写为static 返回置为int
  (2)定义luaL_Reg结构体 这个结构体数组用来因为注册到Lua模块中
     luaL_Reg结构体的第一个字段为字符串 在注册时通知lua该函数的名字
    第二个字段为函数指针
    最后一个永远为NULL 用来标记结尾
  (3) __declspec(dllexport)将函数、类等声明为导出函数,供其它程序调用,作为动态库的对外接口函数、类等
      这个函数非常重要 如果没有 将来生成的.dll不能够被lua模块找到
  (4)向lua中注册上述的表格

(5)C相关的API

  1. typedef struct lua_State lua_State  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必包压栈 fn C函数指针 n 函数关联的upvalue的个数 首先将upvalues依次压栈 然后调用该函数 将C函数压栈 并将n个upvalues出栈
  4. void lua_pushcfunction(lua_State*L,lua_CFunction fn )将c函数压栈 接收一个c函数的指针 然后将Lua.function类型的对象压栈
  5. void lua_register(lua_State*L,const char *name, lua_CFunction f) 注册C函数为一个全局变量
  6. void luaL_setfuncs (lua_State *L, const luaL_Reg *l, int nup);
      注册函数到栈顶的表中;
      参数l:luaL_Reg列表,记录了要注册的函数信息,注意,该列表以{NULL, NULL}结尾;
      nup参数:upvalue的个数,如果不为0,则注册的所有函数都共享这些upvalues;
      先将table压栈,然后将upvalues依次压栈,然后调用该函数进行函数注册。注册完毕后upva
  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值