【问题标题】:using zlib with Visual Studio 2010在 Visual Studio 2010 中使用 zlib
【发布时间】:2011-02-02 03:42:11
【问题描述】:

我尝试制作一个简单的演示程序,使用 zlib 来压缩和解压缩文件,但是当我链接文件时,Visual Studio 2010 链接器给了我这个错误:

Error 2 error LNK1313: ijw/native module detected; cannot link with pure modules

当我尝试将 /clr:pure 更改为仅 /clr 时。该程序编译并运行,但给了我一个运行时错误: “应用程序无法正常启动(0xc000007b)。点击确定关闭应用程序。”

到目前为止,这是我在气球提示中获取 zlib 版本的代码:

String^ info = gcnew String(reinterpret_cast<const char*>(zlibVersion()));
notify->ShowBalloonTip(20000, "Zlib Version", info, ToolTipIcon::Info );

你能帮我弄清楚 zlib 发生了什么以及那个错误是什么。谢谢

【问题讨论】:

    标签: visual-studio c++-cli clr zlib


    【解决方案1】:

    如果您的目标是 CLR,我强烈建议您使用本机(针对 CLR)Zipping/Zlib 库,例如 DotNetZip,而不是试图硬塞本机库来做您想做的事。

    我不是 C++/CLI 专家,所以这可能完全错误,但我相信

    String^ info = gcnew String(reinterpret_cast&lt;const char*&gt;(zlibVersion()));

    导致未定义的行为。原因是System::String 构造函数需要一个System::Char 对象数组,而不是C++ 的char 数据类型。 System::Char 是两个字节宽,char 是一个字节宽(System::String 支持 Unicode;zlib 不支持)。 (无论如何,reinterpret_cast 是一个重要的危险信号——你为什么在这里使用那个演员?)

    另外,错误 0x7B 是

    文件名、目录名或卷标语法不正确。

    (0xC 存在可能是因为它是 NTSTATUS 代码)如果您使用的是 Zlib 的动态链接版本,请确保该 DLL 可供您的程序在某处打开。

    【讨论】:

    • System::String 的构造函数同时接受const wchar_t*(相当于System::Char)和const char*(转换为Unicode)。 reinterpret_cast 绝对是错误的做法。
    猜你喜欢
    • 1970-01-01
    • 2011-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多