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

我有一个C++程序,创建了一个lua_State并运行自定义的Lua脚本。如果我想要预先加载cjson,而不是需要在Lua代码中调用"require",我是否可以知道是否可能并且如何做到?

点赞
用户3586583
用户3586583

你可以通过C++调用一次require函数并将返回值作为全局变量,如果你不想在脚本中不断调用require函数。

例如,你可以在C++中执行:

if (luaL_dostring(L, "cjson = require(\"cjson\")")) // 执行代码
    std::cout << luaL_checkstring (L, -1) << std::endl; // 输出错误

然后你就可以在脚本中像cjson.new()那样使用cjson,而不需要调用require函数或者其他类似的函数,因为它已经成为全局变量。

由于C++已经使用了require函数,所以在后续的lua调用中,调用require函数不会再次运行cjson文件,不像使用dofile或类似函数。

2016-04-21 19:34:35
用户3677376
用户3677376

是的,这是可能的。可以使用luaL_requiref 实现。可以将 thisthis 函数用作参数。您需要将cjson代码链接到可执行文件上,编译器可能需要luaopen_ *函数的函数声明。如果您使用Lua 5.1(尚未具有luaL_requiref),则可以使用或从Compat-5.3 中偷取它们。

2016-04-21 19:41:21