3

我有一个我写的 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()功能时看到。

4

2 回答 2

3

好的,我发现我的脚本中有一个非打印字符导致脚本失败。

谢谢你的回答!

于 2013-10-20T21:08:53.927 回答
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");
于 2013-10-20T17:02:35.520 回答