2011-09-19 2 views
0

저는 오랫동안이 작업을 해오 고 있습니다. 즉, zlib 라이브러리가 내 프로그램에서 작동하도록하는 것입니다. Microsoft Visual C++ 2008 Express Edition을 CLR Windows Forms 응용 프로그램과 함께 사용하고 있습니다. 문제는 zlib가 내가 사용하는 것과 함께 작업하기 위해 오래되었다는 것이 걱정됩니다. zlib의 모든 예제 (극소수의 예제)는 Win32 응용 프로그램과 같습니다.Visual C++ CLR Windows Forms 응용 프로그램에서 zlib 사용

그리고 그것은 다른 것입니다. 구식이 아닌 zlib 예제를 찾을 수 없습니다. 그리고 zlib은 오래되었다는 것을 이해합니다. 그러나 어떤 대안을 찾을 수는 없습니다. (

그렇다면 누구나 내 응용 프로그램과 함께 zlib을 사용할 수 있는지 먼저 말해 줄 수 있습니다. 누군가가 한 걸음 더 나아가고 싶고, 더 좋은 zlib과 같은 프로그램을 추천하고 싶습니다.

(그런데 저는 게임의 레벨 데이터를 읽는 응용 프로그램을 만들고 있습니다. 마인 크래프트. 약간은 here에서 찾을 수 있습니다.)

답변

1

문제가되지 않으므로 C++/CLI가 이와 같은 작업을 처리했습니다. zlib 헤더는 #pragma managed로 관리되는 코드가 아니라 링커에게 가져 오기 라이브러리를 링크하도록 컴파일러에게 알려줘야합니다. 이와 같이, 샘플 콘솔 모드 응용 프로그램에서 : 당신이해야 할

#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)" 

어쩌면 다른 설치 디렉토리 : 내가 몇 가지 C++/CLI 응용 프로그램에서 the DotNetZip library을 사용했습니다

+0

감사합니다. 내 문제를 완벽하게 해결해 주셔서 감사합니다. – smoth190

1

을 선택하려면 : 프로젝트 + 속성, 이벤트, 빌드 후 이벤트 명령 줄을 구축 할 수 있습니다. 그것은 가기가 매우 쉽고 아직 할 수없는 일을 찾지 못했습니다 (압축, 압축 해제, 비밀번호로 보호 된 zip 파일 모두 잘 작동합니다). 설명에서,이 ZLIB에 비해 개선 : 당신이 원하는 모든 내장에있는 닷넷 BCL 하나를 대체 할 더 나은 DeflateStream 또는 GZipStream 클래스 인 경우

이 DotNetZip도하는 것이 있습니다. DotNetZip의 DeflateStream과 GZipStream은 Zlib의 .NET 포트를 기반으로하는 독립형 어셈블리에서 사용할 수 있습니다. 이러한 스트림은 압축 수준을 지원하고 내장 클래스보다 훨씬 우수한 성능을 제공합니다. 이 집합을 완성하기위한 ZlibStream도 있습니다 (RFC 1950, 1951, 1952).

관련 문제