天天挂茶馆

 找回密码
 立即注册
搜索
热搜: C++
查看: 4343|回复: 1

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

[复制链接]

25

主题

37

回帖

7576

积分

VIP会员

积分
7576
发表于 2018-10-7 10:53:16 | 显示全部楼层 |阅读模式
本帖最后由 1149 于 2018-10-7 11:19 编辑

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


2,传递数组
[mw_shl_code=cpp,true]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;
}[/mw_shl_code]


3,传递表参数
[mw_shl_code=cpp,true]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;
}[/mw_shl_code]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

224

主题

468

回帖

42万

积分

管理员

积分
429339
QQ
发表于 2018-10-7 19:52:51 | 显示全部楼层
强烈的支持。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表