2011-02-02 2 views
0

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

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

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

Это мой код до сих пор для получения только ZLIB версии в баллонной носик:

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

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

ответ

1

Если вы ориентируетесь на CLR, я настоятельно рекомендую использовать библиотеку Zipping/Zlib для родной (в CLR), такую ​​как 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 является

The filename, directory name, or volume label syntax is incorrect.

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

+0

Большое спасибо – r1cebank

+0

'System :: String' имеет конструкторы, принимающие как' const wchar_t * '(эквивалент' System :: Char'), так и 'const char *' (преобразует в Unicode). 'reinterpret_cast' - это, безусловно, неправильная вещь. –

Смежные вопросы