Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;和同一COM库中的c#类_C#_C++_Com_Interop - Fatal编程技术网

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

C++;和同一COM库中的c#类,c#,c++,com,interop,C#,C++,Com,Interop,我将现有的C++ COM库(STL,Boost和ATL)重写为C,因为我添加了新的功能。 但是有几个大测试的C++类,我不想重写。 概念上(和向后兼容),这些属于同一个COM库,但是我可以在C++和C语言之间画一条整齐的线,这样所有的交互都是通过显式使用COM接口实现的。 p>在同一个库中,C++和C++组件的最佳组合方式是什么? 最好的方法是编写一个C包装库,作为一个包装器。你正在编写的新C#COM库听起来已经可以满足这个目的了 进入这个C++库,你可以放置你重写的C代码和C++代码的包版本

我将现有的C++ COM库(STL,Boost和ATL)重写为C,因为我添加了新的功能。

但是有几个大测试的C++类,我不想重写。

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


<> p>在同一个库中,C++和C++组件的最佳组合方式是什么?

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

进入这个C++库,你可以放置你重写的C代码和C++代码的包版本。至于如何包装C++代码,你可以在这里做2种不同的事情:

    将一个瘦的包装器C类围绕它,PInvoke进入C++ DLLS
  • 编写C++ /CLI包装器,并直接用这种方式包含C++类

第一个允许您继续使用C代码和语法,但在与C++类的交互方面有点限制(您只能访问DLL导出中所暴露的内容)。 第二种强制你写一些不太愉快的C++/CLI包装代码,但是允许你在所有的荣耀中使用C++类。p>

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