天天挂茶馆

1149 发表于 2018-10-7 10:53:16

c++调用大漠系列:LUA给C++传递参数

本帖最后由 1149 于 2018-10-7 11:19 编辑

1,传递普通类型参数
int test(lua_State* lua)
{
      const char* str = lua_tostring(lua, 1);//从栈底取出一个值,double类型也会被转为字符串
      printf("%s\n", str);
      return 0;
}


2,传递数组
int test(lua_State* lua)
{
      int len = lua_objlen(lua, 1);//咱们只有一个参数,所以我们的数组是在栈底
      for (int i = 1 ; i <= len ; i++)
      {
                lua_pushnumber(lua, i);//lua的数组起始是从1开始,所以咱们把数组下标压入栈顶,push i
                lua_gettable(lua, 1);//这个函数的动作:pop 栈顶取出下标,push arr , 这个时候 , arr的值在栈顶
                const char* str = lua_tolstring(lua, -1, 0);//取出栈顶的值
                lua_pop(lua, 1);//出栈一个元素,恢复初始状态
                printf("%s\n", str);
      }
      
      return 0;
}


3,传递表参数
int test(lua_State* lua)
{
        lua_pushnil(lua);//push nil,这时候栈里有2个元素
        while (lua_next(lua , 1))//从栈顶弹出一个键值,并push -1处的下个键值,push 对应键的值,这时候有3个元素
        {
                const char* str = lua_tolstring(lua, -1, 0);//取出栈顶元素
                printf("%s\n" , str);
                lua_pop(lua, 1);//恢复堆栈
        }
       
        return 0;
}

admin 发表于 2018-10-7 19:52:51

强烈的支持。
页: [1]
查看完整版本: c++调用大漠系列:LUA给C++传递参数