【发布时间】:2011-05-30 08:56:09
【问题描述】:
我将 Lua 嵌入到 C++ 应用程序中。
我有一些模块(目前是简单的 .lua 脚本),我想在引擎启动时以编程方式加载它们,这样当引擎启动时,没有它们的脚本可以使用这些模块必须在脚本顶部包含一个 require 'xxx'。
为了做到这一点,我需要能够以编程方式(即 C++ 结束)要求引擎加载模块,作为初始化的一部分(或之后不久)。
有人知道我该怎么做吗?
【问题讨论】:
我将 Lua 嵌入到 C++ 应用程序中。
我有一些模块(目前是简单的 .lua 脚本),我想在引擎启动时以编程方式加载它们,这样当引擎启动时,没有它们的脚本可以使用这些模块必须在脚本顶部包含一个 require 'xxx'。
为了做到这一点,我需要能够以编程方式(即 C++ 结束)要求引擎加载模块,作为初始化的一部分(或之后不久)。
有人知道我该怎么做吗?
【问题讨论】:
嗯,我只是使用简单的方法:我的 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)
如果你有多个模块要加载,当然,把它放在一个循环中...... :)
【讨论】:
最简单的方法是将linit.c 的副本添加和编辑到您的项目中。
【讨论】: