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

时间:2010-04-21 13:15:25

标签: 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"
#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();  
}  

尝试在Qt Creator中构建它会导致以下错误:

  

无法在参数传递

中将'QUuid *'转换为'const GUID *'

如何在这种情况下正确使用QUuid?

另外,作为一名C ++和Qt新手,我还没有完全掌握模板或界面,所以整体而言我无法完成这些第一步。如果有人可以提供技巧甚至示例代码,例如可以从ZIP文件中提取图像文件(稍后在Qt GUI中显示*),我将非常感激。

  • 目前我的主要目标是编写一个带GUI的程序,用于选择包含图像文件(PNG,JPG等)的存档文件,并在GUI中一次显示一个文件。简而言之,基于Qt的CDisplayEx。

2 个答案:

答案 0 :(得分:1)

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

QUuid boo;
GUID uid = static_cast<GUID>(boo);

答案 1 :(得分:0)

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

查看Qt文档,我发现有一个GUID运算符可以将QUuid转换为Windows GUID:http://doc.trolltech.com/4.6/quuid.html#operator-GUID

当然,这不是跨平台。