gpt4 book ai didi

C++。 SevenZip 压缩为 zip 格式。 ClassFactory 无法提供请求的类

转载 作者:行者123 更新时间:2023-11-28 04:04:45 24 4
gpt4 key购买 nike

我对 SevenZip 库有疑问。我正在尝试使用 zip 格式压缩文件并在创建对象时出现错误(异常)-“CLASS_E_CLASSNOTAVAILABLE ClassFactory 无法提供请求的类”。

代码如下所示:

std::wstring CSevenZipManager::CompressAllFiles( const wchar_t* szSourcePath, const wchar_t* szDestinationPath, void (*UpdateProgressBar)( int, void* ), void* pUserData, SevenZip::CompressionFormatEnum eCompressionFormat /*= SevenZip::CompressionFormat::SevenZip*/ )
{
SevenZip::SevenZipLibrary lib;
std::wstring oError;

try
{
lib.Load(_T("7za.dll"));

SevenZip::SevenZipCompressor compressor( lib, szDestinationPath );
compressor.SetCompressionFormat( eCompressionFormat );
compressor.CompressAllFiles( szSourcePath, true, UpdateProgressBar, pUserData );
}
catch( SevenZip::SevenZipException oEx )
{
oError = oEx.GetMessage();
}

lib.Free();

return oError;
}

然后从 compressor.CompressAllFiles 程序去(不是直接,但在没有重要的事情发生之间)到:

void SevenZipCompressor::CompressFilesToArchive( const TString& pathPrefix, const std::vector< FilePathInfo >& filePaths, int* pPrecent, void (*UpdateProgressBar)( int, void* ), void* pUserData, int* piThreadNumber )
{
CComPtr< IOutArchive > archiver = GetArchiveWriter(m_library, m_compressionFormat);

unsigned long long int uiDirSize = 0;

...

在 GetArchiveWriter 中我有:

CComPtr< IOutArchive > GetArchiveWriter(const SevenZipLibrary& library, const CompressionFormatEnum& format)
{
const GUID* guid = NULL;

switch (format)
{
case CompressionFormat::Zip:
guid = &CLSID_CFormatZip;
break;

case CompressionFormat::GZip:
guid = &CLSID_CFormatGZip;
break;

case CompressionFormat::BZip2:
guid = &CLSID_CFormatBZip2;
break;

case CompressionFormat::Rar:
guid = &CLSID_CFormatRar;
break;

case CompressionFormat::Tar:
guid = &CLSID_CFormatTar;
break;

case CompressionFormat::Iso:
guid = &CLSID_CFormatIso;
break;

case CompressionFormat::Cab:
guid = &CLSID_CFormatCab;
break;

case CompressionFormat::Lzma:
guid = &CLSID_CFormatLzma;
break;

case CompressionFormat::Lzma86:
guid = &CLSID_CFormatLzma86;
break;

default:
guid = &CLSID_CFormat7z;
break;
}

CComPtr< IOutArchive > archive;
library.CreateObject(*guid, IID_IOutArchive, reinterpret_cast< void** >(&archive));
return archive;
}

CLSID_CFormatZip 的样子:

DEFINE_GUID(CLSID_CFormatZip,
0x23170F69, 0x40C1, 0x278A, 0x10, 0x00, 0x00, 0x01, 0x10, 0x01, 0x00, 0x00);

And when zip or any other format is selected I get "CLASS_E_CLASSNOTAVAILABLE ClassFactory cannot supply requested class"on library.CreateObject(*guid, IID_IOutArchive, reinterpret_cast< void** >(&archive)).只有默认选项 - 7z 格式 - 有效。对象被创建。我错过了什么或做错了什么?

最佳答案

解决方案很简单 - 我没有使用完整的 7z.dll,而是使用了较小的一个,它只能压缩为 7z 格式。

关于C++。 SevenZip 压缩为 zip 格式。 ClassFactory 无法提供请求的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58950367/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com