lua与C/Cpp交互与集成

在C/C++中集成lua
1、把lua.c、makefile、luac.c这几个文件删除
2、对于xcode如果出现报错的情况处理,在lua的文件夹中查看解决办法

从C/C++项目中读取lua中的变量

   lua_getglobal(L, "name")--直接把数字放到栈顶
   if(lua_isnumber(l, -1))
       int width = (int)lua_tonumber(l, -1)--isstring和isnumber 不是帮你转化而是帮你检查是否能转化成字符串和数字

    其他的都是类似的;bool string


  从C/C++项目中读取lua中的函数的方式:

  学习调用无参无返回值函数
  学习调用有参无返回值    注意多参数的情况是先入栈的后调用  
  学习调用无参有返回值    返回值就在栈顶,刻意直接获取
  学习调用有参又返回值
  学习调用多返回值的函数    多返回值第一个返回值是-2,因为他是第一个返回然后被压入栈顶,后来又被下一个返回值压入栈顶
  调用lua函数的方式
     pcall函数和获取栈值的注意  
    lua_pcall(m_pcall,n,r,f)//n 参数的个数,r 结果的个数,f失败的返回值 
    lua_pcall的参数进行设置;
    注意下面一般熟用的是assert()进行 

  读取lua中的table和遍历table

   lua_getglobal(l,"name")
  if(lua_istable(l, -1))
{
}
char* getFiled(lua_State*l , const char* key)
{
    char* rlt = null
    lua_pushstring(L, key);--这样就可以把想要的值获取到
    lua_gettable(l,-2);
    if(lua_isstring(l, -2))
    {
        rlt =(char*) lua_tostring(L, -1);
        lua_pop(l, 1);--注意这里可以查看一个luapop的函数的参数含义就能明白了
    }
}
从lua中调用c函数入门:

  编写一个供lua调用的函数

  static int l_getName(lua_state* L)
{
    lua_pushstring(L, "longlingxiu");-- 
    return 1;
}
lua_pushcfunction(m_pLuastate, l_getName);     
lua_setglobal(m_pLuastate,"getMyName");

luaL_dofile(m_pLuastate,"my.lua");
lua_pcall(m_pLuastate,0,0,-1);

然后在lua中调用getMyName这个函数就可以了;

深入理解编写C函数
1.理解供lua调用函数的原理
2.熟练编写有参数的c函数的编写
3.熟练编写多返回值的c函数供lua使用
4.熟练编写返回table的函数供lua使用  




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值