我有第三方C ++ .dll,它会导出一些我希望从C#中使用的类。这个DLL是一个Win32应用程序,我正在使用VS2013在Windows 8.1上工作。当我设置在'Any CPU'下运行的C#程序时,我收到错误“System.BadImageFormatException”。我已经读过其他地方,这可能是由x86和x64组合引起的。所以我将C#程序重新编译为x86。现在我得到“无法加载DLL'libsword.dll':无法找到指定的模块”。我确定dll在正确的目录中。
所有这些在使用Mono的Linux上运行良好。
此时,我不知道该怎么办。
谢谢, 乔恩
答案 0 :(得分:1)
当您将DLL中的常规本机C ++代码视为.NET代码时,会引发BadImageFormatException。 .NET还将代码放在.DLL文件中。
您需要为C ++代码创建C#声明,以便.NET知道如何从托管(.NET / C#)代码转换为本机(C ++)代码。这非常复杂,具体取决于第三方库中的代码。我太过于猜测你需要做什么。
答案 1 :(得分:0)
问题出在C ++库中,该库最初是为Linux编写和开发的。出口定义为:
define SWDLLEXPORT _declspec( dllexport )
用作:
const char * SWDLLEXPORT function_name(args)
适用于Linux,但不适用于Windows。将函数签名更改为:
const char SWDLLEXPORT * function_name(args)
适用于Linux和Windows。