加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

lua中调用C

发布时间:2020-12-14 22:02:41 所属栏目:大数据 来源:网络整理
导读:Call C from Lua(在Lua中调用C动态库函数) C函数原型满足:typedef int (lua_CFunction) (lua_State L); 该函数类型仅仅包含一个表示Lua环境的指针作为其唯一的参数,实现者可以通过该指针进一步获取Lua代码中实际传入的参数 返回值: 返回结果的个数(return
  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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读