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文件中)
谢谢!
此异常可能是由于使用的.NET运行时proc体系结构与导入的dll之间的混淆造成的.
更确切地说:
你使用的是64位Windows吗?默认情况下,运行时将以64位运行.如果您的C++库是针对32位编译的,则在加载库时会出现BadFormatException.如果您的.NET应用程序运行32位并且您的C++库是针对x64编译的,那么同样如此.
如果您可以重新编译库,请执行此操作.否则,您可以强制.NET运行时在编译时使用指定的体系结构,但它会阻止它在其他体系结构上运行.这是你的选择;)当针对.NET或java进行编码时,我们往往会忘记真正发生的事情.
| 归档时间: |
|
| 查看次数: |
4241 次 |
| 最近记录: |