使用C#的C++ .dll函数时出现BadImageFormatException错误?

use*_*792 1 c# c++ dll pinvoke exception

我在使用P/Invoke for C#时遇到了问题.这是我试图从.dll调用的函数(用C++编写):

string
BeatTracker::getName() const
{
    return "Tempo and Beat Tracker";
}
Run Code Online (Sandbox Code Playgroud)

这是我尝试调用此函数的代码:

[DllImport("qm-vamp-plugins.dll",EntryPoint="BeatTracker")]
public static extern string getName();

public QMTempo()
{
   Console.WriteLine(getName());
}
Run Code Online (Sandbox Code Playgroud)

什么似乎是错的?我收到BadImageFormatException.除了IDE给我的模糊名称之外,我怎么能知道未来参考文献中的错误?我顺便使用Visual Studio 2008.

我也在使用(但不确定是否正确)EntryPoint,让它知道我正在使用BeatTracker类中的getName函数(因为还有其他类的getName函数,它们包含在单个.dll文件中)

谢谢!

Eil*_*aee 8

此异常可能是由于使用的.NET运行时proc体系结构与导入的dll之间的混淆造成的.

更确切地说:

你使用的是64位Windows吗?默认情况下,运行时将以64位运行.如果您的C++库是针对32位编译的,则在加载库时会出现BadFormatException.如果您的.NET应用程序运行32位并且您的C++库是针对x64编译的,那么同样如此.

如果您可以重新编译库,请执行此操作.否则,您可以强制.NET运行时在编译时使用指定的体系结构,但它会阻止它在其他体系结构上运行.这是你的选择;)当针对.NET或java进行编码时,我们往往会忘记真正发生的事情.