【问题标题】:Using Lua "require" from inside a zip using physfs使用 physfs 从 zip 内部使用 Lua “require”
【发布时间】:2020-04-08 17:45:36
【问题描述】:

在使用physfs的时候,通过使用luaL_dostring和自己读取文件来加载和运行lua脚本已经很容易了,但是在使用“require”的时候,显然就麻烦了。

有人处理过这个问题吗?我需要....重写部分lua吗?我真的不想那样做!

谢谢。

更新,这就是我的工作方式

static int MyLoader(lua_State *L)
{
    const char *name = luaL_checkstring(L, 1);
    std::string s = name;
    std::replace( s.begin(), s.end(), '.', '/'); // replace all '.' to '/'
    s += ".lua"; // apend .lua
    File moduleFile = FileManager::ReadFile(s.c_str());
    if( luaL_loadbuffer(L, moduleFile.data, moduleFile.fileLength, name) ) {
        lua_pop(L, 1);
    }
    return 1;
}

然后在创建 lua 状态之后...

lua_register(L, "my_loader", MyLoader);
const char* str = "table.insert(package.searchers, 2, my_loader) \n";
luaL_dostring(L, str);

【问题讨论】:

    标签: c++ c lua physfs


    【解决方案1】:

    package.searchers table 包含require 的加载器函数列表。

    如果您希望require 从 zip 文件加载文件,则需要添加一个检查 zip 文件的函数。如果该路径存在于 zipfile 中,请将其解压缩到内存缓冲区并调用 luaL_loadbuffercheckload,就像 searcher_Lua 一样。

    【讨论】:

      猜你喜欢
      • 2012-09-26
      • 2016-03-09
      • 2014-11-29
      • 1970-01-01
      • 2014-06-11
      • 2012-07-21
      • 1970-01-01
      • 2017-06-17
      • 2011-02-19
      相关资源
      最近更新 更多