Как разделить файлы QML, встроенные в DLL? - PullRequest
0 голосов
/ 13 января 2020

У меня есть файл QML, который был встроен в DLL. Я думаю, что было сделано что-то вроде этого

Как я могу встроить ресурс Qt в файл .dll? (Второй ответ).

Есть ли какой-нибудь раздел файла QML для получения исходного кода? Я не очень знаком с фреймворком QT

1 Ответ

0 голосов
/ 13 января 2020

Если он встроен через * .qr c, то он НЕ совместим со стандартными форматами ресурсов windows / linux (.dll / .so). qr c компилируется как файл xxx_qr c. cpp и встраивается компоновщиком в файл .obj с кодом инициализации stati c. Т.е. это просто часть двоичного файла. Вы можете получить доступ к «содержимому» qr c через QFile с помощью URL «qr c: / . ». Но для этого вам нужно загрузить DLL с ресурсами, встроенными в текущий процесс, потому что qr c подключен при инициализации stati c (он же DllMain в Windows). Что-то вроде:

QLibrary lib("./library.dll");
if (!lib.load()) 
    throw exception(lib.errorString().toStdString());
QFile resource(":/resource.qml");
if (!resource.open(QIODevice::ReadOnly))
    throw exception(resource.errorString().toStdString());
resource.copy("./exported.qml");

Чтобы изучить текущее загруженное виртуальное дерево файловой системы qr c, вы можете использовать QDir (": /"). Я полагаю, что отсюда довольно легко выяснить все остальное.

И, конечно, вы должны знать, какие DLL вы загружаете в свой процесс, так как они могут содержать произвольный код, который будет выполняться как Вы называете QLibrary :: load!

...