在C#中使用C ++ DLL对象

时间:2014-09-11 23:20:57

标签: c# c++ mono

我有第三方C ++ .dll,它会导出一些我希望从C#中使用的类。这个DLL是一个Win32应用程序,我正在使用VS2013在Windows 8.1上工作。当我设置在'Any CPU'下运行的C#程序时,我收到错误“System.BadImageFormatException”。我已经读过其他地方,这可能是由x86和x64组合引起的。所以我将C#程序重新编译为x86。现在我得到“无法加载DLL'libsword.dll':无法找到指定的模块”。我确定dll在正确的目录中。

所有这些在使用Mono的Linux上运行良好。

此时,我不知道该怎么办。

谢谢, 乔恩

2 个答案:

答案 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。