我有一个未受管控的C++ DLL,其中仅导出一个类(不是COM...它只是一个简单的C++类)作为其接口。我想在C#中使用这个类,但被告知它不能仅仅被导入到C#中。
该如何正确地在我的C#应用程序中使用这个类?
假设有一个名为Foo的类,以下是简单的实现方式:
然后,您需要使您的C#代码依赖于FooWrapper项目/dll,并确保未管理的dll已正确部署在其中,如何完成取决于未管理的dll,但通常将其放在同一目录下即可。
如果函数不依赖于类的实例,则更简单的方法是P/Invoke。
DllImport是您最好的选择。如果您要传递结构体,可能需要进行一些数据类型转换,但您几乎可以使用它来完成任何操作。
implib
为.NET创建包装器。 - Richard有时候,提供自己的C接口会更加容易。 SWIG 的设置非常复杂。我曾经使用过managed C++和C++/CLI,它们都很好用。最简单的方法是编写一个C包装器(几乎可以被任何其他语言调用,因为大多数语言都有调用C函数的方式)。