Использование zlib с приложением Visual C ++ CLR для Windows Forms - PullRequest
0 голосов
/ 20 сентября 2011

Я пытался сделать это в течение долгого времени, чтобы заставить библиотеку zlib работать с моей программой. Я использую Microsoft Visual C ++ 2008 Express Edition с приложением CLR для Windows Forms. Дело в том, что я беспокоюсь, что zlib слишком стар для работы с тем, что я использую. Все примеры (очень немногие) zlib, которые я нахожу, относятся к приложению Win32.

И это другая вещь; Я не могу найти примеры zlib, которые не устарели. И я понимаю, что zlib стар, но я не могу найти альтернативы: (

Так что, если кто-нибудь может прежде всего сказать мне, возможно ли использовать zlib с моим приложением, и как, спасибо большое. Если кто-то хочет сделать еще один шаг и, возможно, порекомендовать лучшую zlib-подобную программу, которую я смогу использовать, спасибо еще больше.

(И, кстати, я создаю приложение для чтения данных об уровне игры Minecraft. Здесь можно найти немного информации .)

Ответы [ 3 ]

1 голос
/ 20 сентября 2011

Это не проблема, C ++ / CLI был создан для обработки подобных задач. Вы должны сообщить компилятору, что заголовок zlib не является управляемым кодом с управлением #pragma, и указать компоновщику, чтобы он связывал библиотеку импорта. Вот так, в примере приложения в режиме консоли:

#include "stdafx.h"
#pragma managed(push, off)
#include "c:/temp/deleteme/include/zlib.h"
#pragma managed(pop)
#pragma comment(lib, "c:/temp/deleteme/lib/zdll.lib")


using namespace System;

int main(array<System::String ^> ^args)
{
    const char* vers = zlibVersion();
    String^ mvers = System::Runtime::InteropServices::Marshal::PtrToStringAnsi((IntPtr)(void*)vers);
    Console::WriteLine(mvers);
    Console::ReadKey();
    return 0;
}

Единственное, что вам нужно сделать, это скопировать DLL в каталог сборки, чтобы вы могли отладить код. Проект + Свойства, События сборки, Событие после сборки, Командная строка:

 xcopy /d "c:\temp\deleteme\zlib1.dll" "$(TargetDir)"

Может быть, вы хотите выбрать другой каталог установки:)

1 голос
/ 20 сентября 2011

Я использовал библиотеку DotNetZip в нескольких приложениях C ++ / CLI.Начать очень легко, и я еще не нашел ничего, что он не может сделать (архивирование, разархивирование, защищенные паролем zip-файлы, все работает хорошо).Судя по описанию, это улучшение по сравнению с ZLib:

Если все, что вам нужно, это лучший класс DeflateStream или GZipStream, который заменит тот, который встроен в .NET BCL, DotNetZip также имеет это.DlateNetZip DeflateStream и GZipStream доступны в отдельной сборке на основе порта .NET Zlib.Эти потоки поддерживают уровни сжатия и обеспечивают гораздо лучшую производительность, чем встроенные классы.Существует также ZlibStream для завершения набора (RFC 1950, 1951, 1952).

0 голосов
/ 20 сентября 2011

Если вы используете CLR, не можете ли вы использовать встроенную библиотеку .NET gzip?http://msdn.microsoft.com/en-us/library/system.io.compression.gzipstream.aspx

...