Проект С++ (с использованием Qt libs), для которого я кодирую, имеет «встроенную» подсистему Lua 5.1, которая представлена, как я понимаю, lua_State
; чтобы указать, где хранятся внешние модули Lua (файлы .lua
) и библиотеки (файлы .dll
или .so
в зависимости от ОС), чтобы их можно было required
использовать по мере необходимости, мне нужно манипулировать глобальными элементами таблицы package.path
и package.cpath
.
У меня есть код, который может успешно устанавливать эти записи с кодом 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
- так что же не так в этом методе?