Qt中quid的正确使用?(7-Zip DLL使用问题(QLibrary、QUuid GUID转换、接口))

Qt中quid的正确使用?(7-Zip DLL使用问题(QLibrary、QUuid GUID转换、接口)),qt,dll,interface,guid,qlibrary,Qt,Dll,Interface,Guid,Qlibrary,我正在尝试编写一个程序,将使用7-Zip DLL从归档文件(7z、Zip等)中读取文件 到目前为止,我所处的位置如下: #include <QtCore/QCoreApplication> #include <QLibrary> #include <QUuid> #include <iostream> using namespace std; #include "7z910/CPP/7zip/Archive/IArchive.h" #inc

我正在尝试编写一个程序,将使用7-Zip DLL从归档文件(7z、Zip等)中读取文件

到目前为止,我所处的位置如下:

#include <QtCore/QCoreApplication>
#include <QLibrary>
#include <QUuid>
#include <iostream>

using namespace std;  

#include "7z910/CPP/7zip/Archive/IArchive.h"
#include "7z910/CPP/7zip/IStream.h"
#include "MyCom.h"

// {23170F69-40C1-278A-1000-000110070000}  
QUuid CLSID_CFormat7z(0x23170F69, 0x40C1, 0x278A, 0x10, 0x00, 0x00, 0x01, 0x10, 0x07, 0x00, 0x00);  

typedef int (*CreateObjectFunc)(  
 const GUID *clsID,  
 const GUID *interfaceID,  
 void **outObject);  

void readFileInArchive()  
{  
 QLibrary myLib("7z.dll");  
 CreateObjectFunc myFunction = (CreateObjectFunc)myLib.resolve("CreateObject");  
 if (myFunction == 0) {  
  cout << "CreateObject resolve failed!";  
  return;  
 }  
 else {  
  cout << "CreateObject resolved";  
 }  
 CMyComPtr<IOutArchive> outArchive;  
 myFunction(&CLSID_CFormat7z, &IID_IOutArchive, (void **)&outArchive);  
}  

int main(int argc, char *argv[])  
{  
 QCoreApplication a(argc, argv);  
 readFileInArchive();  
 return a.exec();  
}  
#包括
#包括
#包括
#包括
使用名称空间std;
#包括“7z910/CPP/7zip/Archive/IArchive.h”
#包括“7z910/CPP/7zip/IStream.h”
#包括“MyCom.h”
//{23170F69-40C1-278A-1000-000110070000}
QUuid CLSID_CFormat7z(0x23170F69、0x40C1、0x278A、0x10、0x00、0x00、0x01、0x10、0x07、0x00、0x00);
typedef int(*CreateObjectFunc)(
常量GUID*clsID,
常量GUID*接口ID,
void**outObject);
void readFileInArchive()
{  
QLibrary myLib(“7z.dll”);
CreateObjectFunc myFunction=(CreateObjectFunc)myLib.resolve(“CreateObject”);
如果(myFunction==0){

cout您必须在这两种类型之间进行一些转换

查看Qt文档,我发现有一个GUID操作符可以将QUuid转换为Windows GUID:


当然,这不是跨平台的。

您必须显式地将QUuid强制转换为GUID:

QUuid boo;
GUID uid = static_cast<GUID>(boo);
quid boo;
GUID uid=静态广播(boo);

作为解决方案的替代方案,您可以在源代码zlib+quazip库中构建,为图像文件创建简单的缓冲区文件夹,然后使用quazip函数解压所需的文件,这些文件将在将来查看。至少对我来说,这种变体有效。QComicBook似乎使用这种方法,将图像从归档文件提取到临时文件文件夹。它可以完成这项工作,但我目前感兴趣的是将提取的图像以与CDisplayEx相同的方式放置到RAM中(CDisplayEx.exe在运行时打开归档文件时会保留更多RAM)。感谢您的评论,我没有想到zlib或quazip。该死,将代码示例缩短,下面是readFileInArchive()中的剪切部分:if(myFunction==0){cout QUuid::operator GUID()const used?。可能是一些非常基本的东西。。还没有理解正确的语法。Qt文档中没有关于如何使用它的示例,所以我的猴子没有看到它应该如何使用。@whipsnap:它允许从一种类型隐式转换到另一种类型。基本上,您应该能够从QUuid,即n传递它:quid qid;/*…*/GUID gid(qid);它不适用于您正在执行的操作的原因是它试图转换指针,而不是实际的对象。@whipsnap我也不清楚它是如何使用的,因为它是一个
操作符
函数。这意味着它在quid对象上操作,而不是调用它的对象。正常函数是
obj.foo()
但如果
foo()
是运算符,而不是
foo(obj)
是如何使用的。