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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用C ++代码获取Lua package.cpath和path相关的知识,希望对你有一定的参考价值。

我编写的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实例 - 所以这个方法有什么问题?

答案

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

以上是关于使用C ++代码获取Lua package.cpath和path的主要内容,如果未能解决你的问题,请参考以下文章

在C++中使用Lua详解

使用 C/C++ 获取错误消息 MSB6006 错误代码 2

使用liblua获取Lua语法树

使用 C 代码获取与 ifconfig 相同的信息

使用 cpuid 在 C 中获取供应商 ID

转载一篇将C/C++ 与lua混合使用讲的比较入门的文章