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*。


你可能感兴趣的:(备忘录)