0

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

快照.

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

[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 的确切含义是什么以及如何解决它?是代码问题还是架构问题?

4

1 回答 1

0

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

坏图像格式

当动态链接库(.dll 文件)或可执行文件(.exe 文件)的文件格式不符合公共语言运行库预期的格式时,将引发此异常。

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

于 2014-06-27T13:09:44.233 回答