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

我正在将 Lua 嵌入 C++ 应用程序中。

我有些模块(目前只是简单的 .lua 脚本),我想要在引擎启动时以编程方式进行加载,这样当引擎启动时,模块就可以在脚本中使用,而无需在脚本顶部包含 require 'xxx'。

为了做到这一点,我需要在初始化时(或之后不久),能够在编程方式(即 C++ 端)中要求引擎加载模块。

有谁知道我怎么可以做到这一点吗?

原文链接 https://stackoverflow.com/questions/4525757

点赞
stackoverflow用户107090
stackoverflow用户107090

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

2010-12-24 11:21:02
stackoverflow用户284969
stackoverflow用户284969

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

// funky = require ("funky")
//
lua_getfield (L, LUA_GLOBALSINDEX, "require"); // 函数
lua_pushstring (L, "funky");     // 参数 0:模块名称
err = lua_pcall (L, 1, 1, 0);
// 在全局变量中存储 funky 模块表
lua_setfield (L, LUA_GLOBALSINDEX, "funky");

// ... 后面可能处理“err”的非零值
// (我实际上使用一个帮助函数代替 lua_pcall,在出现错误的情况下抛出 C++ 异常)

如果有多个模块要加载,当然可以把它放在循环中…… :)

2011-10-28 20:26:57