Qt 如何拆分嵌入在DLL中的QML文件?

Qt 如何拆分嵌入在DLL中的QML文件?,qt,dll,qml,dllregistration,Qt,Dll,Qml,Dllregistration,我有一个QML文件,该文件已嵌入到dll中。我想是这样做的 第二个答案 是否需要拆分QML文件以获取源代码?我不太熟悉QT框架如果它是通过*.qrc嵌入的,那么它与标准的windows/linux.dll/.so资源格式不兼容。qrc编译为xxx_qrc.cpp文件,并由链接器嵌入为带有静态初始化代码的.obj文件。也就是说,它只是二进制文件的一部分。您可以使用qrc:/通过QFile访问qrc的内容。网址。但对于这一点,您必须在当前进程中加载嵌入了资源的DLL,因为qrc连接在静态初始化中,

我有一个QML文件,该文件已嵌入到dll中。我想是这样做的

第二个答案


是否需要拆分QML文件以获取源代码?我不太熟悉QT框架

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

由于QML文件只是按原样编译的,您应该能够使用资源提取程序提取它们,也许可以这样做,否则google上应该有足够的可用资源