【问题标题】:BadImageFormatException or System.DllNotFoundException When trying to run a c# project尝试运行 c# 项目时出现 BadImageFormatException 或 System.DllNotFoundException
【发布时间】:2014-06-27 12:24:17
【问题描述】:

我已经构建了一个带有输出配置管理器设置的 cpp dll,如快照所示

.

它构建成功并创建了 dll。然后为了使用它,我编写了一个包含 dll 的 c# 项目,如下所示

[System.Security.SuppressUnmanagedCodeSecurity]
[DllImport(@"somePath\ImgProcessorTrial.dll", EntryPoint = "ImgProc")]

之后我用如图所示的配置构建了它

当我尝试运行此应用程序时,我在控制台中得到以下输出。

BadImageFormatException: An attempt was made to load a program with an incorrect format. (Exception from HRESULT: 0x8007000B)

之后,当我更改构建配置并尝试再次构建它时,cpp 项目不会构建并给出许多类型如下所示的错误。

unresolved external symbol for all functions of leptonica library

这个特殊的库 leptonica 和所有必要的库都是在 64 位机器上单独构建的。当我尝试更改 c# 项目的配置时,我得到了异常

DLLNotFoundException

我在项目中所做的是调用 dll 函数来读取图像并对其进行操作。我认为这与我要读取的图像的格式有关。所以我尝试使用 .jpeg 运行应用程序和 .tif 但始终具有相同的输出。我在 64 位机器上的 Visual Studio 2013 和框架 3.5 上执行所有这些操作。BadImageFormatException 的确切含义是什么以及如何解决它?是代码问题还是架构问题?

【问题讨论】:

  • 尝试将plateforme设置为x86或x64而不是任何CPU
  • 设置为 x64 会产生 dllNotFoundException 并且设置为 x86 具有相同的 badImageFormatException 结果
  • 所以保留 x64 设置。你的dll在哪里?在 c# 项目的 bin 文件夹中尝试。
  • 如果您完全了解问题所在,请提供答案
  • 标准错误,该对话框中的平台名称对于 .NET 程序没有意义。右键单击您的 EXE 项目,属性,构建选项卡。在那里设置平台目标,您需要勾选“首选 32 位”选项,以便它与您的 32 位 C++ DLL 兼容。

标签: c# .net dll visual-studio-2013 leptonica


【解决方案1】:

BadImageFormat 与 .jpeg 或 .tif 无关...

BadImageFormat

动态链接的文件格式时抛出此异常 库(.dll 文件)或可执行文件(.exe 文件)不符合 公共语言运行时所期望的格式。

在您的情况下,您调用的 DLL 本身就是 64 位,因此您必须将项目编译为 x64。定位 x86 时会得到 BadImageFormat

【讨论】:

    猜你喜欢
    • 2017-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-22
    • 1970-01-01
    相关资源
    最近更新 更多