The Shroom Ответов: 1

Ziplib - ziparchive::getentry() возвращает пустую запись в 64-битных сборках


Я пытаюсь реализовать способ для моего игрового движка распаковывать файлы, которые ему нужны. Для этого я использую библиотеку ZipLib, но у меня возникла проблема, когда функция ZipArchive::GetEntry() возвращает пустую запись. Самое странное, что он делает это только в 64-битных сборках. 32-разрядные сборки работают нормально, даже если код точно такой же.

Вот мой код:
std::string LoadSingleFileContent(const std::string& path)
{
	ZipArchive::Ptr archive = ZipFile::Open(m_gameRootPath + DATA_PAK_PATH);
	if (archive == NULL)
	{
		throw(std::exception("Failed to load PAK archive."));
	}

	ZipArchiveEntry::Ptr entry = archive->GetEntry(path); // returns invalid entry on 64-bit builds only

	std::istream* compressionStream = entry->GetDecompressionStream(); // since entry is invalid, this crashes
	std::string content(std::istreambuf_iterator<char>(*compressionStream), {});

	return content;
}


Что я уже пробовал:

Ничего. Я не смог найти никакой информации по этому вопросу :/

1 Ответов

Рейтинг:
1

David A. Gray

Хотя я ничего не знаю о ZipLib, в том числе о том, совместим ли он с x64, на сайте есть репозиторий zlib GitHub - txwizard/zlib_x64_and_ARM: порт zlib для Intel x64, AMR и ARM64[^] это, как я знаю, совместимо, потому что я портировал и тестировал его. Хотя моей конечной целью был процессор ARM, мне пришлось построить для x64 на Windows, Прежде чем я повторил операцию для ARM64. Проект определяет четыре платформы: Win32, x64, ARM и ARM64. Возьмите сборку x64 и запустите ее вместе с ней.