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

cjs*_*rio 46 c# dll unmanaged c++-cli

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

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

Shu*_*oUk 44

假设类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


Ste*_*art 8

对于单个类库,这个答案可能有点过分,但SWIG是一个很好的解决方案,用于"包装"C/C++类以供其他语言使用.它适用于C#.

看到 http://www.swig.org/.