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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章