加载32位DLL时BadImageFormatException,目标是x86

Cod*_*der 33 c# dll dllimport 32bit-64bit badimageformatexception

我有一个DLL(FreeType)肯定是32位(标题:IMAGE_FILE_MACHINE_I386).

我想使用DllImport从C#代码中使用它.

我的应用程序的目标是x86,IntPtr.Size是4,进程是32位.

但我得到BadImageFormatException(HRESULT的异常:0x8007000B).有什么不对?

当然我使用的是64位Windows 7.

Eri*_*ith 41

据我所知,专门为x86构建并在64位操作系统中运行的程序集只能加载为x86构建的库,否则将抛出BadImageFormatException.在64位操作系统中,为Any CPU或x64构建的程序集在尝试加载x86库时会抛出相同的异常.

因此,假设没有发生任何令人难以置信的奇怪现象,我将确保您通过打开项目属性并单击"构建"选项卡将应用程序设置为x86.确保'Platform Target'设置为'x86'而不是任何CPU.

或者,您可以尝试查找64位版本的DLL以进行测试.

  • @Eric Smith我遇到了同样的问题...这解决了它.非常感谢! (3认同)
  • +1.有同样的问题并成功修复它. (2认同)

Rck*_*kLN 7

使用Build - > Platform中的"Any CPU"选项重新编译dll.

在此输入图像描述


Cod*_*der 6

好吧,好像是虚假警报.它与bitness无关,只有其他DLL缺少freetype所依赖的.但是,错误消息可能更有帮助.


BSa*_*ita 5

从 C# 调用 64 位 C Dll 时遇到相同的错误。我不得不手动更改C#Properties->Build->Platform targetAny Cpux64。显然Any Cpu有时是NoCpu。