C++与C#交互的参数传递

C++、C#交互有三种方式:

1 COM, 在C++这边声明参数的时候,BYTE就是C#的byte,BSTR就是C#的string,想做出参就加*,BYTE*就是C#的ref byte,BSTR* 就是 ref string,但是如果要传byte[]就麻烦了,千万别琢磨着转成string用BSTR传,怎么都不对,只有用BitConverter两个字节两个字节的转在C++这边才能保持正确,但是太慢了,转几M的东西要几十分钟,所以果断VARIANT,在C#端会翻译成object,用C#Marshal分配一段unmanaged的内存,用IntPtr直接传过来就好了,C++端会看到参数类型是VT_INT,直接用VARIANT里INT就是地址,又快又方便。

2 P-INVOKE,参数比较简单,直接上网搜一下C++和C#变量对应表就好了,很多,这里和COM有一点不同,比如BYTE*会直接翻译为IntPtr,方便很多。(对于是用COM还是P-INVOKE,见仁见智吧)。

3 C++/CLI,没什么好说的了,直接Marshal转换各种类型就OK了,唯一麻烦的就是String转换的时候只能用char* 不能用const char*。


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值