C++与lua交互之C++访问lua
假设lua中:
name="gzw" id=17010805 sex=man tab={ num=100, str="hello" } foo_one=function() print("不带参数的foo()被调用了") end foo_two=function(num) print("num=",num) return num end
接下来要在C++中调用lua.
首先看调用全局变量:
int main() { lua_State* L=luaL_newstate(); //创建lua虚拟栈 luaL_openlibs(L); //打开需要链接的库 luaL_dofile(L,"a.lua"); lua_getglobal(L,"name"); //把lua中的全局变量name拿出来压入了虚拟栈中 lua_getglobal(L,"id"); printf("栈中元素个数为:%d\n",lua_gettop(L)); //得到栈顶的索引,相当于求栈的长度 const char* str=lua_tostring(L,1); //压入的为字符长,所以根据索引转化打印 int id=lua_tonumber(L,2); printf("str=%s\n",str); printf("id=%d\n",id); lua_close(L); return 0; }
接下来看C++调用lua表中的字段
lua_getglobal(L,"tab"); lua_pushstring(L,"str"); lua_gettable(L,-2); printf("tab.str=%s\n",lua_tostring(L,-1)); lua_pop(L,1); lua_pushstring(L,"num"); lua_gettable(L,-2); printf("tab.num=%g\n",lua_tonumber(L,-1));
lua_gettable(L,Index) index指的是表,执行这句话会把栈顶元素当成键,根据这个键把对应的值找到,然后把值压入表中,也就是执行完这段后,栈顶元素为tab,但是里面有了值.
lua_getfield(L,-1,"num");这句等价于 lua_pushstring(L,-1,“num”); lua_gettable(L,-2);
C++调用lua中的函数:
lua_getglobal(L,"foo_one"); lua_pcall(L,0,0,0); lua_getglobal(L,"foo_two"); lua_pushnumber(L,123); lua_pcall(L,1,1,0);