2017-12-22 21 views
0

Das C++ (mit Qt libs) Projekt, für das ich kodiere, ist ein "eingebettetes" Lua 5.1 Subsystem welches repräsentiert wird durch, wie ich es verstehe, ein lua_State; um einzurichten, wo externe Lua-Module (.lua Dateien) und Bibliotheken (.dll oder .so Dateien je nach OS) gespeichert werden, so dass sie required wie benötigt werden kann, muss ich die globalen package.path und package.cpath Tabellenmitglieder manipulieren.Lua package.cpath & path mit C++ code erhalten

Ich habe Code, der erfolgreich diese Einträge mit C++ Code setzen kann und ich kann die Ergebnisse im eingebetteten System sehen.

Allerdings kann ich nicht in der Lage zu von der C++ Seite der Dinge zu bekommen. Derzeit für package.path habe ich folgendes:

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; 
} 

Ich würde eine ; getrennte Liste von Einträgen wie erwartet:

./?.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 

aber ich immer nur eine leere QString zurück, anstatt bekommen. Nun bin ich mit Lua nicht so vertraut wie mit C/C++, also ist es möglich, dass dies ein Lua-Stack-Manipulationsproblem ist, aber ich bin mir sicher, dass ich die richtige lua_State Instanz habe - was ist bei dieser Methode falsch?

Antwort

0

Sie können nicht lua_getglobal(L, "package.path") auf einmal, müssen Sie package auf dem Stapel zuerst und dann path.