c,c++调用lua脚本,并传入table,for循环构造table

使用c 和c++调用lua脚本时,有时需要传入比较复杂的参数,所以先转化成table比较好:

c++代码:

好多代码都是连续很多语句压栈,但是有时候不确定长度的时候就显得很不好用,使用for循环就比较好。要注意的是,每次入栈key-value键值对,都需要将他们弹出放入table,如下:

#include <stdio.h>
#include<stdlib.h>
#include<stdint.h>
#include<iostream>
#include<string.h>
using namespace std;
extern "C"{
#include "lua.h"
#include "lauxlib.h"
#include "lualib.h"
}


int main()
{

    lua_State * L=NULL;

    /* 初始化 Lua */  
    //  L = lua_open();  
    L =luaL_newstate();
    /* 载入Lua基本库 */  
    luaL_openlibs(L);
    /* 运行脚本 */  
    luaL_dofile(L, "func.lua"); 

    for(int i=1;i<=4;i++){
        lua_getglobal(L,"mytable");
        lua_pushnumber(L, i);           // 将要赋值的结果压入栈
        lua_pushnumber(L, i+10);              // 赋值操作             -->lua_rawseti用法
        lua_settable(L, -3);
    }
    lua_getglobal(L,"structTest");
    lua_pcall(L, 0, 0, 0);  
    lua_close(L);
    return 1;
}

lua脚本:

mytable = {}

function structTest()
    
    print("lua script func.lua have been load ")
    for k, v in pairs(mytable) do
        print("key: ".. k)
        print("val: ".. v)
        print()
    end 
end

结果:

key: 1
val: 11.0

key: 2
val: 12.0

key: 3
val: 13.0

key: 4
val: 14.0
c遍历table:

// 进行下面步骤前先将 table 压入栈顶 
 int nIndex = lua_gettop( pLua );  // 取 table 索引值 
 lua_pushnil( pLua );  // nil 入栈作为初始 key 
 while( 0 != lua_next( pLua, nIndex ) ) 
 { 
     // 现在栈顶(-1)是 value,-2 位置是对应的 key 
     // 这里可以判断 key 是什么并且对 value 进行各种处理 
     lua_pop( pLua, 1 );  // 弹出 value,让 key 留在栈顶 
 } 
 // 现在栈顶是 table

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值