系统.使用平台调用时出现BadImageFormatException (HResult=-2147024885)

本文关键字:HResult -2147024885 BadImageFormatException 平台调用 系统 | 更新日期: 2023-09-27 18:15:16

给定一个C库,foo。lib和c#控制台应用程序bar.exe,我正在尝试执行平台调用。然而,当从库

调用方法时,我一直得到以下异常<>之前系统。BadImageFormatException发生HResult = -2147024885消息=试图加载格式不正确的程序。(来自HRESULT: 0x8007000B的异常)之前

我已经配置编译器将bar.exe构建为x64和foo。Lib是一个x64库。我运行了以下命令来确认

<>之前> corflags bar.exeMicrosoft (R) . net Framework CorFlags转换工具。版本4.0.30319.1版权(c)微软公司。版权所有。版本号:v4.0.30319CLR标头:2.5PE: pe32 +CorFlags: 1我只有:132bit: 0签名:0>dumpbin/headers foo.lib...文件类型:LIBRARY文件头值8664机(x64)3节数53B535D4时间日期戳星期四七月03 12:52:04 2014指向符号表的文件指针8号符号可选标头的大小为00的特点...之前

我肯定……lib是正在加载的库,当我试图删除它时,这会导致System.DllNotFoundException。

如果您知道哪里出了问题,我将不胜感激。

编辑当我第一次尝试调用该库时,就会出现异常。我有一个静态类,声明如下

private static class NativeMethods
{
    private const string libname = "foo.lib";
    [DllImport(NativeMethods.libname)]
    public static extern void foo_method();
}

异常发生在第一次调用

NativeMethods.foo_method()

系统.使用平台调用时出现BadImageFormatException (HResult=-2147024885)

试图加载格式不正确的程序

异常消息非常准确。.lib文件确实不是正确的格式。只有链接器知道如何在创建具有正确格式的文件时使用它们。一个DLL .

您需要在您的解决方案中创建另一个项目来创建DLL。foo_method()需要从DLL中导出。当您从.lib开始时,这往往有点棘手,您必须使用.def文件来命名导出。用__declspec(dllexport)就容易多了。不清楚你是如何得到。lib的,但如果你自己构建它,那么你绝对应该考虑修改项目,这样它就能创建合适的可执行文件。一个DLL。

相关文章: