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

发布时间:2018-10-7 10:53

1882 1 0

1149

用户头衔:VIP会员

关注 私信
本帖最后由 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]

本帖子中包含更多资源

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

x
B Color Smilies

扫码加入QQ群

842848001@qq.com
842848001

GMT+8, 2024-4-27 02:15

Powered by Discuz! X3.4© 2001-2017 Comsenz Inc.

网站内容仅供用于学习和交流,请遵循相关法律法规

QQ在线咨询|小黑屋|手机版|Archiver|一切从零开始 ( 蜀ICP备15031375号-3 )