使用C ++代码获取Lua package.cpath和path

问题描述 投票:0回答:1

我编写的C ++(使用Qt libs)项目是“嵌入式”Lua 5.1子系统,据我所知,它代表了lua_State;为了设置外部Lua模块(.lua文件)和库(.dll.so文件取决于操作系统)的存储位置,以便它们可以根据需要为required,我需要操纵全局package.pathpackage.cpath表成员。

我有能够用C ++代码成功设置这些条目的代码,我可以在嵌入式系统中看到结果。

但是我似乎无法从C ++方面获得它们。目前,对于package.path,我有以下内容:

QString TLuaInterpreter::getLuaPath()
{
    lua_State* L = pGlobalLua;
    if (!L) {
        qDebug() << "LUA CRITICAL ERROR: in TLuaInterpreter::getLuaPath - no suitable Lua execution unit found.";
        return QString("LUA CRITICAL ERROR");
    }

    lua_getglobal(L, "package.path");
    lua_getfield(L, LUA_GLOBALSINDEX, "package.path");
    QString result(QString::fromUtf8(lua_tostring(L, 1)));

    return result;
}

我希望;分隔的条目列表如:

./?.lua;/usr/local/share/lua/5.1/?.lua;/usr/local/share/lua/5.1/?/init.lua;/usr/local/lib/lua/5.1/?.lua;/usr/local/lib/lua/5.1/?/init.lua;/usr/share/lua/5.1/?.lua;/usr/share/lua/5.1/?/init.lua 

但我只得到一个空的QString回来。现在我对Lua并不熟悉C / C ++,所以有可能这是一个lua堆栈操作问题,但我确信我有正确的lua_State实例 - 所以这个方法有什么问题?

c++ qt lua qt5 lua-table
1个回答
0
投票

你不能立刻lua_getglobal(L, "package.path"),你必须先在堆栈上获得package然后path

© www.soinside.com 2019 - 2024. All rights reserved.