在C#应用程序中使用C ++类DLL

我有一个非托管的C ++ DLL,它仅导出单个类(不是COM ...这只是一个简单的C ++类)作为其接口。我想在C#中使用此类,但被告知不能仅将其导入C#中。

在我的C#应用程序中使用此类的正确方法是什么?


慕哥9229398
浏览 426回答 3
3回答

开满天机

假设Foo类的简单方法:创建一个C ++ / CLI项目,称为FooWrapper。使FooWrapper依赖于非托管dll(但是通常情况下)。创建一个托管类ManagedFoo,其中包含单个Foo *类型的私有实例字段。在ManagedFoo中提供公共包装功能,这些功能会转发到基础实例字段。可选(尽管推荐):将参数从.net习惯用法(字符串等)转换为C ++习惯用法(std :: string或char *)捕获非托管异常并抛出托管异常然后,使您的C#代码依赖于FooWrapper项目/ dll,并确保将非托管dll与其一起正确部署,如何完成取决于非托管dll,但通常在同一目录中就足够了。如果函数不依赖于类的实例,则P / Invoke更为简单

不负相思意

有时,提供自己的C接口会更容易。 SWIG设置非常简单。我使用托管的C ++和C ++ / CLI,它们很好。最简单的就是做一个C包装器(并且几乎所有其他语言都可以使用它,因为大多数语言都可以调用C函数)。
打开App,查看更多内容
随时随地看视频慕课网APP