2017-12-22 15 views
0

私がコーディングしているC++(Qtライブラリを使用しています)プロジェクトは、「理解しているように」lua_Stateで表される「組み込みの」Lua 5.1サブシステムです。外部のLuaモジュール(.luaファイル)とライブラリ(OSに応じて.dllまたは.soファイル)が格納される場所を設定するには、グローバルpackage.pathおよびpackage.cpathテーブルメンバーを操作する必要があります。C++コードでLua package.cpath&pathを取得しています

に設定して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を取得します。今は私がC/C++のようにLuaをよく知っているわけではないので、これはLUAのスタック操作の問題かもしれませんが、私は正しいlua_Stateインスタンスを持っていると確信しています - この方法で何が間違っていますか?

答えて

0

lua_getglobal(L, "package.path")を一度に作成することはできません。最初にスタックにpackageを取得してからpathを取得する必要があります。

関連する問題