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
",lua_gettop(L));  //得到栈顶的索引,相当于求栈的长度

const  char* str=lua_tostring(L,1);   //压入的为字符长,所以根据索引转化打印
 int id=lua_tonumber(L,2);
 printf("str=%s
",str);
 printf("id=%d
",id);
 

 lua_close(L);
    return 0;
}

接下来看C++调用lua表中的字段

lua_getglobal(L,"tab");
lua_pushstring(L,"str");

lua_gettable(L,-2);

printf("tab.str=%s
",lua_tostring(L,-1));
lua_pop(L,1);
lua_pushstring(L,"num");
lua_gettable(L,-2);

printf("tab.num=%g
",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);  
原文地址:https://www.cnblogs.com/SunShine-gzw/p/13806326.html