我有一个C++程序,它创建一个lua_State并运行自定义Lua脚本。如果我想让lua_State预加载辛森而不是要求在Lua代码中调用"require“,我能知道这是否可能,以及如何做到这一点吗?
发布于 2016-04-21 19:41:21
是的,有可能。为此请使用luaL_requiref。使用这或这函数作为参数。您需要将cjson代码链接到您的可执行文件,编译器可能会喜欢luaopen_*函数的函数声明。如果您使用Lua5.1(它还没有luaL_requiref ),您可以使用或窃取Compat-5.3。
发布于 2016-04-21 19:34:35
您可以通过C++调用require一次,如果不想在脚本中调用require,则可以从返回值中生成一个全局变量。
例如,在C++中,do:
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或类似的
https://stackoverflow.com/questions/36777560
复制相似问题