当前位置: 代码迷 >> C# >> 要调用c++ dll,但有std:地图 ,shared_ptr这样的参数,好麻烦
  详细解决方案

要调用c++ dll,但有std:地图 ,shared_ptr这样的参数,好麻烦

热度:54   发布时间:2016-05-05 04:53:56.0
要调用c++ dll,但有std::map ,shared_ptr这样的参数,好麻烦
如题:要调用c++ dll,但有std::map ,shared_ptr这样的参数,函数就十来个,但这些类型的封送有点麻烦,有些还感觉封送不了,求解决方案,谢谢
------解决思路----------------------
1. 直接P/Invoke:这个虽然不需要写额外的封装,但是需要能搞清楚c++标准类型的内存布局。

(以下方式都需要额外的封装,不过封装自己可以控制,不需要完全按照原有接口一对一封装,而是可以根据调用方的需要,把一定功能封装在一起。)

2. 写一个C方式的对C++库的封装,c#通过P/Invoke调用。需要c/c++技能。
3. C++ interop:使用C++/CLI写一个混合c++和cli代码的中间层做转换,提供托管封装。需要会使用C++/CLI。
4. COM interop:通过COM封装c++库,这样c#那边就可以通过COM interop方式调用。需要会用c/c++进行COM封装。

根据自己掌握的知识技能选择。一般来说,p/invoke 和 c++ interop 是优先考虑的方案。