同一个 COM 库中的 C++ 和 c# 类
Posted
技术标签:
【中文标题】同一个 COM 库中的 C++ 和 c# 类【英文标题】:C++ and c# classes in same COM Library 【发布时间】:2014-03-17 07:06:21 【问题描述】:在添加新功能时,我正在将现有的 C++ COM 库(STL、Boost 和 ATL)重写为 C#。
但是有几个经过良好测试的大型 C++ 类我宁愿不重写。
从概念上讲(并且为了向后兼容)它们属于同一个 COM 库,但是我可以在 C++ 和 C# 之间划清界限,以便所有交互都通过显式使用 COM 接口。
在同一个库中包含 C# 组件和 C++ 组件的最佳方式是什么?
【问题讨论】:
【参考方案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 包装器的非常有用的资源。
【讨论】:
以上是关于同一个 COM 库中的 C++ 和 c# 类的主要内容,如果未能解决你的问题,请参考以下文章
尝试使用 COM-interop 从 C# 库中附加 vb6 中的对象时,获取“无法将 'Field' 转换为 'Field' 类型(同一类)”