【问题标题】:How do I split out QML files embedded within a DLL?如何拆分嵌入在 DLL 中的 QML 文件?
【发布时间】:2020-01-13 02:10:04
【问题描述】:

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

How can I embed a Qt resource into a .dll file? (第二个答案)。

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

【问题讨论】:

  • 由于QML文件是按原样编译的,你应该可以用资源提取程序来提取它们,也许nirsoft可以做到,否则google上应该有足够的可用资源跨度>

标签: qt dll qml dllregistration


【解决方案1】:

如果它是通过 *.qrc 嵌入的,那​​么它与标准 windows/linux (.dll/.so) 资源格式不兼容。 qrc 被编译为 xxx_qrc.cpp 文件并被链接器嵌入为带有静态初始化代码的 .obj 文件。 IE。它只是二进制文件的一部分。您可以通过带有“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 时执行的任意代码!

【讨论】:

    猜你喜欢
    • 2020-07-02
    • 2018-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-14
    相关资源
    最近更新 更多