我有一个我写的Lua脚本,里面有两个函数:
function CallbackServerStatus ()
print("Status exec")
end
function CallbackServerInit ()
print("Server initialized\n")
end
这就是我试图用C ++调用我的Lua函数的方法:
printf("LUA | Exec LUA: CallbackServerInit()\n");
luaL_dofile(LuaEngine::state, "loaders/test.lua");
lua_getglobal(LuaEngine::state, "CallbackServerInit");
lua_pcall(LuaEngine::state, 0, 0, 0);
但是在控制台中"Server initialized\n"
无处可见。我在这里做错了什么?甚至没有错误,我删除"Server initialized\n"
函数时只看到CallbackServerStatus()
。
答案 0 :(得分:3)
好的,我发现我的脚本中有一个非打印字符导致脚本失败。
感谢您的回答!
答案 1 :(得分:2)
我认为您可能还需要重新构建代码。
void execute(std::string szScript)
{
int nStatus = 0;
nStatus = luaL_loadfile(L, szScript.c_str());
if(nStatus == 0){ nStatus = lua_pcall(L, 0, LUA_MULTRET, 0); }
error(nStatus);
}
void callFunction(std::string szName)
{
int nStatus = 0;
lua_getglobal(L, szName.c_str());
nStatus = lua_pcall(L, 0, LUA_MULTRET, 0);
error(nStatus);
}
void error(int nStatus)
{
if(nStatus != 0)
{
std::string szError = lua_tostring(L, -1);
szError = "LUA:\n" + szError;
MessageBox(NULL, szError.c_str(), "Error", MB_OK | MB_ICONERROR);
lua_pop(L, 1);
}
}
我已经为我的申请写了这个。你也可以使用它。这样,您可以在编译脚本或调用函数时观察到任何类型的错误。
execute("C:\test.lua");
callFunction("MyFunc");