使用zlib与Visual c++ CLR Windows窗体应用程序

Using zlib with a Visual C++ CLR Windows Forms Application

本文关键字:Windows 窗体 应用程序 CLR c++ zlib Visual 使用      更新时间:2023-10-16

我一直在尝试这样做很长一段时间,那就是让zlib库与我的程序一起工作。我使用Microsoft Visual c++ 2008 Express Edition与CLR Windows窗体应用程序。问题是,我担心zlib太老了,无法与我正在使用的东西一起工作。我找到的所有zlib示例(极少数示例)都是在Win32应用程序中。

这是另一件事;我找不到任何不过时的zlib示例。我知道zlib是旧的,但我找不到任何替代方案:(

所以如果有人能首先告诉我是否有可能在我的应用程序中使用zlib,以及如何使用,非常感谢。如果有人想更进一步,也许推荐一个更好的类似zlib的程序,我可以使用,更感谢。

(顺便说一下,我正在创建一个应用程序来读取游戏Minecraft的关卡数据。

这不是问题,c++/CLI就是用来处理这样的任务的。您必须使用#pragma managed告诉编译器zlib头文件不是托管代码,并告诉链接器链接导入库。像这样,在一个控制台模式的示例应用程序中:

#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:tempdeletemezlib1.dll" "$(TargetDir)"

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

我已经在几个c++/CLI应用程序中使用了DotNetZip库。它很容易上手,我还没有找到它不能做的事情(压缩、解压缩、密码保护的zip文件都很好用)。从描述来看,它是对ZLib的改进:

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

如果你正在使用CLR,你不能使用内置的。net gzip库吗?http://msdn.microsoft.com/en-us/library/system.io.compression.gzipstream.aspx