【发布时间】:2014-06-27 19:03:27
【问题描述】:
我正在使用 C# 加载 C++ dll,并收到此错误:
“MyApp.exe 中发生了“System.BadImageFormatException”类型的未处理异常” “附加信息:尝试加载格式不正确的程序。(HRESULT 异常:0x8057000B)
我不知道为什么。 C++ dll 是使用 vs2012 向导、win32 应用程序、带预头的 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,使用正确的路径加载时,加载失败。
【问题讨论】:
-
检查进程是32位,而dll是64位,还是vs verse
-
为什么返回类型保留
int?如果将 C# 应用程序的目标平台设置为x64会发生什么? -
看来我的应用程序是 32,因为它在 Windows 进程监视器中有一个 32*。但是我使用 C# 创建应用程序,那么如何将其更改为 x64?
-
@HassanNisar 它抛出同样的错误。
-
@Ono,可能不相关,但你能告诉我为什么使用
private extern static int Test();而不是private extern static long Test();吗?
标签: c# c++ visual-studio-2012 dll dllimport