2011-09-19 50 views
0

我一直试图做很长时间,那就是让zlib库与我的程序一起工作。我正在使用带有CLR Windows窗体应用程序的Microsoft Visual C++ 2008速成版。问题是我担心zlib会老去使用我正在使用的东西。我找到的zlib的所有例子(极少数例子)都是用Win32应用程序。将zlib与Visual C++ CLR Windows窗体应用程序结合使用

而这是另一回事;我找不到任何不过时的zlib示例。我明白,zlib是旧的,但我找不到任何替代方法:(

因此,如果任何人都可以首先告诉我是否有可能使用zlib与我的应用程序,以及如何,谢谢一堆。有人想要更进一步,也许建议一个更好的类似zlib的程序,我可以使用,谢谢更多。

(顺便说一下,我创建了一个应用程序来读取游戏的关卡数据我的世界,一点点可以对here被发现。)

回答

1

这不是问题,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)" 

也许你想选择一个不同的安装目录:)

+0

谢谢你,你完美解决了我的问题! – smoth190

1

我在几个C++/CLI应用程序中使用the DotNetZip library。这很容易,我还没有找到它无法做到的事情(压缩,解压缩,密码保护的zip文件都可以正常运行)。从描述,它是在zlib的改进:

如果你想要的是一个更好的DeflateStream和GZipStream类,以取代内置到.NET BCL的一个,DotNetZip了这一点。 DotNetZip的DeflateStream和GZipStream在独立程序集中可用,基于Zlib的.NET端口。这些流支持压缩级别并提供比内置类更好的性能。还有一个ZlibStream来完成这个集合(RFC 1950,1951,1952)。

相关问题