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