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

时间:2010-12-24 10:33:46

标签: c++ lua

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

我有一些模块(现在,简单的.lua脚本),我想以编程方式加载,因为引擎正在启动,因此当引擎启动时,模块可用于没有它们的脚本必须在脚本顶部包含一个require'xxx'。

为了做到这一点,我需要能够以编程方式(即C ++结束),要求引擎加载模块,作为初始化的一部分(或之后不久)。

任何人都知道我该怎么做?

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:3)

嗯,我只是使用简单的方法:我的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)

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