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

本文关键字:C++dll 对象 | 更新日期: 2023-09-27 18:21:39

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

所有这些都可以在使用Mono的Linux上正常工作。

在这一点上,我不知道如何继续。

谢谢,Jon

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

当您将DLL中的常规本机C++代码视为.NET代码时,会引发BadImageFormatException。NET还将代码放入.DLL文件中。

您需要为C++代码创建C#声明,以便.NET知道如何从托管(.NET/C#)代码转换为本机(C++)代码。这相当复杂,具体取决于第三方库中的代码。我无法推测你需要做什么。

问题出在C++库中,该库最初是为Linux编写和开发的。出口被定义为:

define SWDLLEXPORT _declspec( dllexport )

其被用作:

const char * SWDLLEXPORT  function_name(args)

它在Linux中工作,但在Windows中不工作。将函数签名更改为:

const char SWDLLEXPORT * function_name(args)

适用于Linux和Windows。