아카이브 파일 (7z, zip 등)에서 파일을 읽는 데 7-Zip DLL을 사용하는 프로그램을 작성하려고합니다.Qt에서 올바른 QUuid 사용? (7-Zip DLL 사용 문제 (QLibrary, QUuid GUID 변환, 인터페이스)
#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는 창조주 즉 다음과 같은 오류로 이어질 것입니다 구축을 위해 노력 :
cannot convert 'QUuid*' to 'const GUID*' in argument passing
어떻게 올바르게 컨텍스트에서 사용할 수 QUuid해야 내가 지금까지있어 여기 어디에
이야?
또한 C++ 및 Qt 초보자이기 때문에 템플릿이나 인터페이스를 아직 파악하지 못했기 때문에 전체적으로 이러한 첫 번째 단계를 수행하는 데 문제가 있습니다. 예를 들어 이미지 파일을 ZIP 파일 (예 : Qt GUI에 나중에 * 표시됨)에서 추출 할 수있는 방법에 대한 팁이나 예제 코드를 제공 할 수 있다면 매우 높이 평가할 것입니다.
- 현재 나의 주요 목표는 이미지 파일 (PNG, JPG 등)이 포함 된 보관 파일을 선택하고 GUI에서 해당 파일을 한 번에 하나씩 표시하기위한 GUI로 프로그램을 작성하는 것입니다. 짧은 Qt 기반 CDisplayEx.
당신 솔루션에 대한 대안으로, 당신은 소스 코드 ZLIB + quazip 도서관에 구축 된 이미지 파일에 대한 간단한 버퍼 폴더를 만든 다음 압축을 해제 할 수있다 quazip 함수를 사용하면 미래에 볼 수있는 파일이 필요합니다. 적어도이 변형은 효과가있었습니다. – mosg
QComicBook은 아카이브에서 임시 폴더로 이미지를 추출하여이 방법을 사용하는 것으로 보입니다. http://github.com/stolowski/QComicBook 현재 작업을 수행하고 있지만 현재 CDisplayEx가 실행하는 것과 동일한 방식으로 추출 된 이미지를 RAM에 저장하는 데 관심이 있습니다 (cdisplayex.exe는 런타임시 RAM을 더 많이 예약합니다. 아카이브 파일). 의견을 보내 주셔서 감사합니다. zlib 또는 quazip에 대해 생각하지 않았습니다. – whipsnap
젠장, < and > 짧은 코드 예제를 잘라내십시오. readFileInArchive()의 잘라낸 부분은 다음과 같습니다. if (myFunction == 0) { cout << "CreateObject resolve failed!"; 반환; } else { cout << "CreateObject resolved"; } CMyComPtr outArchive; myFunction (& CLSID_CFormat7z, & IID_IOutArchive, (void **) & outArchive); –
whipsnap