我一直试图这样做很长时间,那就是让zlib库与我的程序一起工作。我正在使用带有CLR Windows窗体应用程序的Microsoft Visual C ++ 2008 Express Edition。问题是我担心zlib会使用我正在使用的东西。我找到的zlib的所有示例(极少数示例)都带有Win32应用程序。
那是另一回事;我找不到任何没有过时的zlib示例。而且我确实知道zlib已经老了,但我找不到任何替代方案:(
所以如果有人能首先告诉我是否可以在我的应用程序中使用zlib,以及如何,感谢一堆。如果有人想更进一步,可能会推荐一个更好的类似zlib的程序,我还可以使用它,非常感谢。
(顺便说一句,我正在创建一个应用程序来读取游戏Minecraft的关卡数据。在here上可以找到一点。)
答案 0 :(得分: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复制到构建目录中,以便您可以调试代码。 Project + Properties,Build Events,Post-Build Event,命令行:
xcopy /d "c:\temp\deleteme\zlib1.dll" "$(TargetDir)"
也许你想选择一个不同的安装目录:)
答案 1 :(得分:1)
我在几个C ++ / CLI应用程序中使用了the DotNetZip library。它很容易上手,我还没有找到它不能做的任何事情(压缩,解压缩,密码保护的zip文件都运行良好)。从描述来看,这是对ZLib的改进:
如果您想要的是更好的DeflateStream或GZipStream类来替换.NET BCL内置的那个,DotNetZip也有。 DotNetZip的DeflateStream和GZipStream在基于Zlib的.NET端口的独立程序集中提供。这些流支持压缩级别,并提供比内置类更好的性能。还有一个ZlibStream来完成这个集合(RFC 1950,1951,1952)。
答案 2 :(得分:0)
如果你正在使用CLR,你不能使用内置的.NET gzip库吗? http://msdn.microsoft.com/en-us/library/system.io.compression.gzipstream.aspx