Правильное использование QUuid в Qt?(Проблемы использования 7-Zip DLL (QLibrary, преобразование QUuid GUID, интерфейсы) - PullRequest
0 голосов
/ 21 апреля 2010

Я пытаюсь написать программу, которая будет использовать 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 позже *), я был бы очень признателен.

  • Моя главная цель на данный момент - написать программу с графическим интерфейсом для выбора архивных файлов, содержащих файлы изображений (PNG, JPG и т. Д.), И отображать эти файлы по одному в графическом интерфейсе. Короче говоря, основанный на Qt CDisplayEx.

Ответы [ 2 ]

1 голос
/ 21 апреля 2010

Вы должны явно привести QUuid к GUID:

QUuid boo;
GUID uid = static_cast<GUID>(boo);
0 голосов
/ 21 апреля 2010

Вы должны использовать некоторые преобразования между двумя типами.

Просматривая документацию Qt, я обнаружил, что есть оператор GUID, который преобразует QUuid в GUID Windows: http://doc.trolltech.com/4.6/quuid.html#operator-GUID

Конечно, это не кроссплатформенная форма.

...