Lua与VC的交互

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"); //得到第二行的两个数字

其他行照此类推。



你可能感兴趣的:(Lua,lua,vc)