我正在尝试编写一个程序,该程序将使用 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*”
在这种情况下应该如何正确使用 QUID?
此外,作为 C++ 和 Qt 新手,我还没有完全掌握模板或接口,所以总的来说,我在完成这些第一步时遇到了麻烦。如果有人可以提供提示甚至示例代码,例如如何从 ZIP 文件中提取图像文件(稍后将在 Qt GUI 中显示*),我将不胜感激。
- 我目前的主要目标是编写一个带有 GUI 的程序,用于选择包含图像文件(PNG、JPG 等)的存档文件,并在 GUI 中一次显示一个文件。简而言之,基于 Qt 的 CDisplayEx。