【问题标题】:embedded Lua loading modules programmatically (C++)嵌入式 Lua 以编程方式加载模块 (C++)
【发布时间】:2011-05-30 08:56:09
【问题描述】:

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

我有一些模块(目前是简单的 .lua 脚本),我想在引擎启动时以编程方式加载它们,这样当引擎启动时,没有它们的脚本可以使用这些模块必须在脚本顶部包含一个 require 'xxx'。

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

有人知道我该怎么做吗?

【问题讨论】:

    标签: c++ lua


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 假设我的模块在 /usr/local/lua/script/mymodule.lua 中,我将如何修改 linit.c 以获得所需的功能?我查看了源代码,它似乎是针对 C 包而不是 Lua 脚本的——我错过了什么吗?
      • @skyeagle:抱歉,我假设是 C 模块。对于 Lua 模块,您可以将环境变量 LUA_INIT 设置为 @loadmymodules.lua 并使用 require 加载所有 Lua 模块。
      猜你喜欢
      • 2012-03-13
      • 2015-08-12
      • 2013-02-17
      • 1970-01-01
      • 2019-02-12
      • 1970-01-01
      • 2016-09-17
      • 1970-01-01
      • 2015-11-16
      相关资源
      最近更新 更多