【问题标题】:Extracting cab file with 32 bit CabExtract library in 64bit C# application在 64 位 C# 应用程序中使用 32 位 CabExtract 库提取 cab 文件
【发布时间】:2014-04-24 08:13:04
【问题描述】:

最近,我正在用CabExtract(用C 编写)在64 bit C# application 中提取cab 文件。该库在 32 位应用程序中运行时工作正常,但在 64 位应用程序中使用相同的库时,它会引发以下异常:

从 cabExtract.dll 导入的实现方式如下:

[DllImport("cabExtract.dll", EntryPoint="ExtractCabBegin", CharSet=CharSet.Unicode, ExactSpelling=true)]
internal static extern int ExtractCabBegin();

异常:System.BadImageFormatException

消息:试图 > 加载格式不正确的程序。 (例外来自 HRESULT: 0x8007000B)

我怀疑 CabExtract 库支持 32 位。但我没有找到任何 64 位的 CabExtract 库。所以,我的问题:

它能否从 64 位托管应用程序中使用 32 位非托管库?如果可以,怎么做?

【问题讨论】:

  • 在这种情况下你不应该使用 64 位包吗? cygwin.com/packages/x86_64/cabextract
  • 谢谢 rene...我已经完成了,但我无法获得该来源?没有下载选项来获取源代码。
  • 嗯,如果您从主页获取源并自己编译?
  • @downvoter : 请在投票前发表评论...
  • 投票是匿名的……你必须忍受这一点。尽管您的问题还不错,但您的最后一个子弹要求提供场外资源,这使您的问题成为一个接近的候选人。如果您添加了您尝试下载源代码并将其编译为 x64 的内容,您可能会撤销该反对意见...

标签: c# dll pinvoke dllimport cab


【解决方案1】:

它能否从 64 位托管应用程序中使用 32 位非托管库?如果可以,怎么做?

不,这是不可能的。 64 位进程只能加载 64 位模块。 32 位进程只能加载 32 位模块。

您链接到的库作为源提供,并受 LGPL 许可的保护。只要您遵守该许可,您就可以将代码编译成 64 位 DLL 并在您的 64 位进程中使用它。

【讨论】:

    猜你喜欢
    • 2012-12-27
    • 2020-11-25
    • 1970-01-01
    • 1970-01-01
    • 2011-01-16
    • 2014-12-24
    • 1970-01-01
    • 1970-01-01
    • 2014-04-27
    相关资源
    最近更新 更多