【问题标题】:"Error in error handling" when calling lua function from C++从 C++ 调用 lua 函数时出现“错误处理错误”
【发布时间】:2016-05-15 22:48:34
【问题描述】:

这不是关于如何从 C++ 调用 lua 函数。我已经可以成功地做到这一点。这是关于 lua 函数“loadfile”在被 C++ 调用的函数中使用时不再起作用。

我正在尝试将一个 lua 文件加载到另一个 lua 文件中,以便调用它的函数。如果我将 test() 从 functions.lua 移动到 game.lua,mystring 接收到“test”就好了。

但是,当我将 init() 函数添加到 game.lua 文件并将 test() 移动到 functions.lua 文件时:

  1. loadfile 似乎不再起作用,产生“错误处理错误”
  2. 调用 test() 不起作用(可能是由于加载文件失败),这也会导致“错误处理错误”消息。

C++:

// Having loaded game.lua...
state["init"]();
std::string mystring = state["test"]();

game.lua:

function init()
    loadfile("functions.lua")()
end

functions.lua:

function test()
  return "test"
end

错误:

"Error in error handling"

当我使用 ZeroBrane 来测试这个 Lua 脚本时,只需这样做:

init()
print(test())

一切正常...所以我使用 C++ 或使用 lua 文件的方式有问题。

我在这里做错了什么?为什么以这种方式使用 loadfile 似乎不起作用? lua 没有被初始化到看到它的常规函数​​由 C++ 启动的地步吗?真的很奇怪 loadfile 是如何通过 ZeroBrane 而不是 C++ 工作的。

我正在使用 Selene,这是一个与 Lua 的仅 C++11 标头绑定。

【问题讨论】:

    标签: c++ lua


    【解决方案1】:

    别忘了建立 lua 上下文!

    建立 Lua 上下文

    using namespace sel;
    State state; // creates a Lua context
    State state{true}; // creates a Lua context and loads standard Lua libraries
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-21
      • 2011-07-02
      • 1970-01-01
      相关资源
      最近更新 更多