从C ++调用Lua函数不能使用2个定义的函数

时间:2013-10-20 15:14:41

标签: c++ lua

我有一个我写的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()

2 个答案:

答案 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");