在调用中出现“attempt to call a nil value”错误,然后程序崩溃, 弄了一个下午没弄好,后来发现是要在读取完文件后调用
lua_pcall(L, 0, 0, 0); 来使LUA文件中所有全局函数和数据得到创建, 才可以进行调用。 以下是流程代码
//hello.lua
function add(a, b)return a + b
end
//c++ 代码
void callLuaTest()
{
lua_State *L;
L = luaL_newstate();
luaL_openlibs(L);
luaL_loadfile(L, "hello.lua");
//在调用前创建所有全局函数和数据,不然接着调用lua函数会失败!!
lua_pcall(L, 0, 0, 0);
//调用lua add 函数
lua_getglobal(L, "add");
lua_pushinteger(L, 3);
lua_pushinteger(L, 8);
lua_pcall(L,2,1,0);
int result = lua_tonumber(L,-1);
lua_close(L);
}
也可以使用 luaL_dofile,该函数实际执行了读取和加载,源代码为
#define luaL_dofile(L, fn) \
(luaL_loadfile(L, fn) || lua_pcall(L, 0, LUA_MULTRET, 0))
参考资料:http://www.troubleshooters.com/codecorn/lua/lua_c_calls_lua.htm