在C ++中使用嵌入式Lua中的cjson

时间:2016-04-21 18:22:12

标签: c++ lua

我有一个C ++程序,它创建一个lua_State并运行自定义Lua脚本。如果我想让lua_State预加载cjson而不是要求调用"要求"在Lua代码中,我可以知道它是否可行,我该怎么做?

2 个答案:

答案 0 :(得分:2)

是的,这是可能的。请使用luaL_requiref。使用thisthis函数作为参数。您需要将cjson代码链接到您的可执行文件,编译器可能会欣赏luaL_requiref函数的函数声明。如果你使用Lua 5.1(还没有ExceptionsManager.js),你可以使用或偷取Compat-5.3

答案 1 :(得分:1)

如果您不想在脚本中调用require,可以通过C ++调用require一次,并从返回值中创建一个全局变量。

例如在C ++中执行:

if (luaL_dostring(L, "cjson = require(\"cjson\")")) // run code
    std::cout << luaL_checkstring (L, -1) << std::endl; // print error

之后,您可以在cjson这样的脚本中使用cjson.new(),而无需任何需要或此类调用,因为它作为全局变量存在。

由于C ++使用require,因此稍后在lua中调用require将不会再次运行cjson文件,这与使用dofile或类似文件不同