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

本文关键字:c++ 同一个 COM | 更新日期: 2023-09-27 17:50:37

我正在重写一个现有的c++ COM库(STL, Boost &当我在c#中添加新功能时,

然而,有几个经过良好测试的大型c++类,我宁愿不重写。

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

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

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

最好的方法是编写一个c# COM库作为包装器。你正在编写的新的c# COM库听起来已经可以满足这个目的了。

在这个c#库中,你可以放置你重写的c#代码和一个包装的c++代码版本。至于如何在c++代码中包装,你可以在这里做两件不同的事情:
  • 在它周围放置一个薄包装c#类,并将PInvoke放入c++ dll
  • 编写一个c++/CLI包装器,并以这种方式直接包含c++类

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

第二种方法迫使您编写一些相当不愉快的c++/CLI包装器代码,但允许您充分使用c++类。

这个链接是为c++库编写c++/CLI包装器的一个非常有用的资源。