首页 > 解决方案 > 如何拆分嵌入在 DLL 中的 QML 文件?

问题描述

我有嵌入到 dll 中的 QML 文件。我认为它是这样做的

如何将 Qt 资源嵌入到 .dll 文件中? (第二个答案)。

有没有办法拆分QML文件来获取源代码?我对QT框架不是很熟悉

标签: qtdllqmldllregistration

解决方案


如果它是通过 *.qrc 嵌入的,那​​么它与标准的 windows/linux (.dll/.so) 资源格式不兼容。qrc 被编译为 xxx_qrc.cpp 文件并被链接器嵌入为带有静态初始化代码的 .obj 文件。即它只是二进制文件的一部分。您可以通过带有“qrc:/ . ” URL 的 QFile 访问 qrc 的“内容”。但为此,您必须加载嵌入在当前进程中的资源的 DLL,因为 qrc 与静态初始化(在 Windows 中也称为 DllMain)挂钩。就像是:

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");

要探索当前加载的虚拟 qrc 文件系统树,可以使用 QDir(":/")。我想从这里找出其余部分很容易。

当然 - 你必须知道你正在加载什么样的 DLL 到你的进程中,因为它们可能包含将在你调用 QLibrary::load 时执行的任意代码!


推荐阅读