【问题标题】:How do I split out QML files embedded within a DLL?如何拆分嵌入在 DLL 中的 QML 文件?
【发布时间】:2020-01-13 02:10:04
【问题描述】:
【问题讨论】:
-
由于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 时执行的任意代码!