看过上一篇文章lua与C++交互—配置文件就知道C++是怎么获取lua里边的变量了,实际上用C++调用lua函数也与此类似。步骤如下:
- 获得lua函数的地址
- 通过栈将函数需要的参数传递给lua
- 运行该函数,函数会将运行结果压入栈
- 栈中取出结果
一、定义lua函数
在lua文件里面我们写一个简单的加法函数。
//config.lua文件内容
function myadd(a,b)
return a+b
end
二、在C++程序里面调用
//获取lua函数地址
lua_getglobal(lua_state,"myadd");
//压第一个参数入栈
lua_pushnumber(lua_state, 2);
//压第二个参数入栈
lua_pushnumber(lua_state, 4);
//调用函数,表示2个输入,1个返回结果
if(lua_pcall(lua_state, 2, 1, 0) != 0)
std::cout << "Wrong when calling function myadd.\n";
//获取返回结果
if(lua_isnumber(lua_state, -1))
{
std::cout << "the result of add function is " << lua_tonumber(lua_state, -1) << std::endl;
lua_pop(lua_state, 1);
}