以编程方式加载嵌入式Lua模块 (C++)

3
我正在将Lua嵌入C++应用程序中。我有一些模块(目前是简单的.lua脚本),希望在引擎启动时以编程方式加载,这样当引擎启动时,这些模块将对脚本可用,而无需在脚本顶部包含 require 'xxx' 语句。
为了实现这个目标,我需要能够在初始化过程中(或之后不久)通过编程方式(即C++端)要求引擎加载这些模块。
请问有谁知道我该如何做到这一点?
2个回答

5

嗯,我采用了简单的方法:我的C++代码只需调用Lua的require函数来预加载我想要预加载的Lua脚本!

// funky = require ("funky")
//
lua_getfield (L, LUA_GLOBALSINDEX, "require"); // function
lua_pushstring (L, "funky");     // arg 0: module name
err = lua_pcall (L, 1, 1, 0);
// store funky module table in global var
lua_setfield (L, LUA_GLOBALSINDEX, "funky");

// ... later maybe handle a non-zero value of "err"
// (I actually use a helper function instead of lua_pcall
// that throws a C++ exception in the case of an error)

如果你有多个模块需要加载,当然可以放在一个循环中... :)

4
最简单的方法是将linit.c的副本添加和编辑到您的项目中。

假设我的模块在 /usr/local/lua/script/mymodule.lua 中,我该如何修改 linit.c 以获得所需的功能?我已经查看了源代码,它似乎是针对 C 包而不是 Lua 脚本的 - 我有什么遗漏吗? - skyeagle
1
@skyeagle:抱歉,我假设是C模块。对于Lua模块,您可以将环境变量LUA_INIT设置为@loadmymodules.lua,并在其中使用require加载所有Lua模块。 - lhf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接