四、关于C++/CLI的一点总结

255 阅读1分钟

最近在给C++动态库包皮(知识是严肃的,莫笑,hia,hia,hia~),给C#的人用。扒了别人的博客,节选一点贴出来,忘了从哪里扒的了,后期慢慢补,先厚颜定为原创吧。声明,总结的部分不是原创。

总结:有C#及C++背景的人使用C++/CLI的必备知识:

1, C++/CLI里的new等于C++里的new, gcnew等于C#里的new

2, 原生指针用*表示,托管引用使用^表示

如: Stream^ stream = gcnew Stream();

3, array^ 等于 System.Byte[]

4, pin_ptr关键字能把托管引用转换为原生指针:

如: pin_ptr pBytes = & byteArray[0];

然后pBytes就可以当作原生的BYTE* 使用了

等代码执行完pBytes的有效范围,byteArray就会恢复可被GC处理的状态.

待续...

/分割线/

补一下心得:

区分C++和C#,可以直接说C#是托管代码,C++是非托管代码;而CLI就是它俩之间的胶水。所以:

1、C++层,应封装所有非基础头文件对外不可见,如#include 这种的可以对CLI可见,但是,任何第三方的头文件不要暴露出去,做好一个壳类,对其封装

2、CLI层,每个CLI层的 ref 类,C++的类指针作为其成员变量,在 CLI 的构造函数中,new 出来对应的 C++类

3、C# 层的函数、内存等都可以转化为 C++ 的指针供其操作,这就需要对应的 马歇尔变换