0

アーカイブファイル(7z、zipなど)内からファイルを読み取るために7-ZipDLLを使用するプログラムを作成しようとしています。

これが私が今のところいるところです:

#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*」を「constGUID*」に変換できません

このコンテキストでQUuidを正しく使用するにはどうすればよいですか?

また、C ++とQtの初心者である私は、テンプレートやインターフェイスをまだ十分に理解していないため、全体として、これらの最初のステップを実行するのに苦労しています。たとえば、ZIPファイルから画像ファイルを抽出する方法(後でQt GUIに表示される*)に関するヒントやサンプルコードを提供していただければ幸いです。

  • 現在の私の主な目標は、画像ファイル(PNG、JPGなど)を含むアーカイブファイルを選択し、それらのファイルを1つずつGUIに表示するためのGUIを備えたプログラムを作成することです。要するに、QtベースのCDisplayExです。
4

2 に答える 2

1

QUuidをGUIDに明示的にキャストする必要があります。

QUuid boo;
GUID uid = static_cast<GUID>(boo);
于 2010-04-21T17:59:18.847 に答える
0

2つのタイプの間で何らかの変換を使用する必要があります。

Qtのドキュメントを見ると、QUuidをWindows GUIDに変換するGUID演算子があることがわかりました:http://doc.trolltech.com/4.6/quuid.html#operator-GUID

もちろん、これはクロスプレートフォームではありません。

于 2010-04-21T13:52:07.313 に答える