использование zlib с Visual Studio 2010 - PullRequest
0 голосов
/ 02 февраля 2011

Я пытался создать простую демонстрационную программу, которая использует zlib для сжатия и распаковки файлов, но когда я связывал файл, компоновщик Visual Studio 2010 выдал мне эту ошибку:

Error 2 error LNK1313: ijw/native module detected; cannot link with pure modules

Когда я попытался изменить / clr: pure на just / clr.программа компилируется и запускается, но выдает ошибку времени выполнения: «Не удалось правильно запустить приложение (0xc000007b). Нажмите кнопку« ОК », чтобы закрыть приложение».

Это мой код для получения zlib).версия в подсказке:

String^ info = gcnew String(reinterpret_cast<const char*>(zlibVersion()));
notify->ShowBalloonTip(20000, "Zlib Version", info, ToolTipIcon::Info );

Можете ли вы помочь мне выяснить, что случилось с zlib и что это за ошибка.Спасибо

1 Ответ

1 голос
/ 02 февраля 2011

Если вы ориентируетесь на CLR, я настоятельно рекомендую использовать собственную (для CLR) библиотеку Zipping / Zlib, такую ​​как DotNetZip , вместо того, чтобы пытаться заставить собственную библиотеку делать то, что вы хотите.

Я не эксперт по C ++ / CLI, так что это может быть совершенно неправильно, но я считаю, что

String^ info = gcnew String(reinterpret_cast<const char*>(zlibVersion()));

приводит к неопределенному поведению.Причина в том, что конструктор System::String ожидает массив объектов System::Char, а не тип данных C ++ char.System::Char имеет ширину в два байта, char имеет ширину в один байт (System::String поддерживает Unicode; zlib - нет).(В любом случае, reinterpret_cast - это главный красный флаг - почему вы используете это приведение здесь?)

Кроме того, ошибка 0x7B равна

Имя файла, имя каталога,или неверный синтаксис метки тома.

(0xC там, вероятно, потому что это код NTSTATUS) Убедитесь, что, если вы используете динамически связанную версию Zlib, DLL доступна для вашей программы.открыть где-нибудь.

...