如何在.net项目中使用C ++类库

时间:2010-08-06 08:55:01

标签: .net c++ com dll wrapper

我的.net项目需要使用用C ++编写的第三方类库。我已经尝试从项目的上下文菜单“Add a refence ...”中直接添加对此DLL的引用,但它不起作用,因为我认为这个DLL没有实现COM对象模型。

我现在有哪些选择?有人建议在这个DLL周围创建一个.net包装器,但我以前从未这样做过,所以我正在寻找一个简单的介绍,可能还有一些例子。我过去最接近的事情是使用pInvoke调用外部库中的方法(例如来自win32.dll),但在这种情况下,我可能还需要将本机C ++类型包装到.net中的等效表示中,也可能是一些要考虑的实例变量,所以我不知道pInvoke是否足够。

如果有人能指出我正确的方向,我真的很感激,如果需要更多信息,请告诉我。

非常感谢。

3 个答案:

答案 0 :(得分:2)

我知道有两个选项

  1. P/Invoke这是DllImport路线
  2. C ++ / CLI wrapper (here is a tutorial)

答案 1 :(得分:2)

假设您没有库的源代码,或者还有另一个原因导致您无法将库转换为C ++ / CLI程序集。

您可能对SWIG(http://www.swig.org/)包装器生成器感兴趣。您可以为SWIG提供一个C ++库的公共接口,它为任何支持的后端语言编写一个包装器,C#恰好是其中之一。

答案 2 :(得分:1)

正如您所说,有两种方法可以做到:

1)使用P / Invoke导入C ++函数。

2)通过将非托管代码包装到mannged并使用“Add Reference”在.net应用程序中添加该库。 Here就是一个简单的例子。

This链接将为您提供.net互操作性的详细信息。

这些P / Invoke是最简单的方法。对于.net中的c ++等效类型,你可以进行编组,这也很容易,你会发现很多相同的教程。