【发布时间】: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