1、从C读取lua文件:
lua_State *L = luaL_newstate();
luaopen_base(L);
int ret=luaL_dofile(L,"111.lua");
Console::WriteLine("open ret={0}\n",ret);
lua_resume(L,0);
2、读取一个单独的变量
111.lua中有: aa=3
lua_getglobal(L,"aa"); //将aa读出来放到堆栈顶部
int s=lua_tointeger(L,-1); //从堆栈顶部读取数字
Console::WriteLine("top={0},s}
3、读取一维数组
111.lua中有:tb1={x=5,y=10,z=15}
lua_getglobal(L,"tb1");
lua_getfield(L,-1,"x");
lua_getfield(L,-2,"y");
lua_getfield(L,-3,"z");
int a=lua_tointeger(L,-1);
int b=lua_tointeger(L,-2);
int c=lua_tointeger(L,-2);
Console::WriteLine("top={0},{1},{2}",a,b,c);
4、读取二维数组
111.lua中有tb2={{level=1,x=3,y=4},{level=2,x=-3,y=-2}}
其中,level是key,后面两个是数据
lua_getglobal(L,"tb2"); //将tb2读出放到栈顶
lua_pushnumber(L,1); //指定读取tb2的第1行(如果要读第2行请将这里的1改为2),并将此行放到堆栈顶端,此时tb2在堆栈中变成了-2位置,所以下面一行取表时用的是-2
lua_gettable(L,-2); //从堆栈中-2行取出tb2放到堆栈顶端(-1位置)
lua_getfield(L,-1,"x");
lua_getfield(L,-2,"y");
int s=lua_tointeger(L,-1);
int t=lua_tointeger(L,-2);
Console::WriteLine("top={0},{1}",s,t);
5、连续循环读取数组中的多个元素
lua_settop(L,0);
lua_getglobal(L,"tb2");
lua_pushnumber(L,1); //压入key:第一行
lua_gettable(L,-2);
lua_getfield(L,-1,"x");
lua_getfield(L,-2,"y"); //得到第一行的两个数字
int s=lua_tointeger(L,-1);
int t=lua_tointeger(L,-2);
console::WriteLine("top={0},{1}",s,t);
lua_pop(L,3); //把栈顶三行:两个数字和一个table弹掉,然后重新压入key和table,得到新的一行。
lua_pushnumber(L,2); //压入key:第二行
lua_gettable(L,-2);
lua_getfield(L,-1,"x");
lua_getfield(L,-2,"y"); //得到第二行的两个数字
其他行照此类推。