我正在使用 C# 加载 C++ dll,并收到此错误:
“MyApp.exe 中发生了类型为‘System.BadImageFormatException’的未处理异常” “附加信息:尝试加载格式不正确的程序。(HRESULT 异常:0x8057000B)
我不明白为什么。 C++ dll 是使用 vs2012 向导、win32 应用程序、带有 pre-head 的 dll 生成的。它是使用 x64 选项构建的。这是代码:
// MyNativeDLL.cpp : Defines the exported functions for the DLL application.
//
#include "stdafx.h"
//char* pMemoryBuffer = NULL;
using namespace std;
__declspec(dllexport) long Test()
{
long a;
a = 1;
a++;
return a;
}
调用它的C#代码是:
[DllImport("C:\\MyNativeDLL\\x64\\Debug\\MyNativeDLL.dll", EntryPoint = "Test")]
private extern static int Test();
void doJob()
{
long a = Test(); // exception thrown here
}
C# 代码是使用 Any CPU 选项构建的,并且正在加载 x64 本机 dll。 我想知道我哪里做错了?我已经尝试了很长时间,但真的被困在这里。谢谢!
更新 当我使用 win 32 选项编译本机 dll 并设置正确的 dll 路径时,它会成功加载。但是当我使用 x64 选项编译本机 dll 并使用正确的路径加载时,加载失败。
正如您提到的: C++ dll 是使用 vs2012 向导、win32 应用程序、带有 pre-head 的 dll 生成的。它是使用 x64 选项构建的
DLL 和 exe 必须都是 32 位,或都是 64 位。