同一个COM库中的C ++和c#类

时间:2014-03-17 07:06:21

标签: c# c++ com interop

我在添加新功能时将现有的C ++ COM库(STL,Boost& ATL)重写为C#。

然而,有一些经过良好测试的大型C ++类我不想重写。

从概念上讲(以及为了向后兼容)这些属于同一个COM库,但是我可以在C ++和C#之间画一条线条,这样所有的交互都是通过显式使用COM接口。

在同一个库中包含C#组件和C ++组件的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

最好的方法是编写一个C#COM库作为包装器。您正在编写的新C#COM库听起来已经可以用于此目的。

在这个C#库中,您可以放置​​重写的C#代码和C ++代码的包装版本。至于如何包装 C ++代码,你可以在这里做两件事:

  • 在它周围放置一个薄的包装器C#类,并将PInvoke放入C ++ DLL
  • 编写C ++ / CLI包装器并以这种方式直接包含C ++类

第一个允许您继续使用C#代码和语法,但在与C ++类的交互方面有一些限制(您只能访问DLL导出中公开的内容)。

第二种方法迫使你编写一些相当不愉快的C ++ / CLI包装器代码,但允许你在他们所有的荣耀中使用你的C ++类。

此链接here是一个非常有用的资源,用于为C ++库编写C ++ / CLI包装器。