lua中调用C

  1. Call C from Lua(在Lua中调用C动态库函数)

    • C函数原型满足:typedef int (lua_CFunction) (lua_State L);
      该函数类型仅仅包含一个表示Lua环境的指针作为其唯一的参数,实现者可以通过该指针进一步获取Lua代码中实际传入的参数
      返回值: 返回结果的个数(returns the number of results);没有返回值时,返回0
    • 注册C函数: void lua_register (lua_State L,const char name,lua_CFunction f);
      解释:Lua环境指针L;Lua中可见的函数名name;C中的函数指针f

    • 注册C函数库:void luaL_register (lua_State L,const char libname,const luaL_Reg *l);

    • 加载C动态库过程:require(XXX)
      解释:查找动态库XXX.so;执行动态库中的函数是luaopen_XXX完成注册

    • 动态库生成命令gcc -Wall -shared -fPIC -o XXX.so -llua
      如果出现自定义C函数与lua中的函数重名,则会出现lua C stack overflow错误
      这里写图片描述

  2. C从lua调用的C代码获取参数和返回值
    参数: 如果Lua代码在调用时传递的参数,1表示Lua调用时的第一个参数(从左到右),依此类推。luaL_checknumber、luaL_checkstring可以获得参数
    返回值入栈:lua_pushnumber、lua_pushstring、lua_pushlstring;并且需要返回返回值的数目
  3. userdata:
void*lua_newuserdata (lua_State *L, size_t size);    //full userdata 是一片原始的内存区
void lua_pushlightuserdata (lua_State *L, void*p);   //light userdata 是一个表示C指针的值,void *类型
void *lua_touserdata(lua_State *L, int index);   //假如给定的索引位置是full userdata,则返回内存块地址;假如给定的索引位置是light userdata,则返回指针,否则返回NULL
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值