一尘不染

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

c#

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

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


阅读 231

收藏
2020-05-19

共1个答案

一尘不染

假设Foo类的简单方法:

  1. 创建一个C ++ / CLI项目,称为FooWrapper。
  2. 使FooWrapper依赖于非托管dll(但是通常情况下)。
  3. 创建一个托管类ManagedFoo,其中包含单个Foo *类型的私有实例字段。
  4. 在ManagedFoo中提供公共包装功能,这些功能会转发到基础实例字段。
  5. 可选(尽管推荐):
    • 将参数从.net习惯用法(字符串等)转换为C ++习惯用法(std :: string或char *)
    • 捕获非托管异常并抛出托管异常

然后,使您的C#代码依赖于FooWrapper项目/ dll,并确保非托管dll随其正确部署,如何完成取决于非托管dll,但通常在同一目录中就足够了。

如果函数不依赖于类的实例,则P / Invoke更为简单

2020-05-19