最近在给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<unsigned char>^ 等于 System.Byte[]
4, pin_ptr关键字能把托管引用转换为原生指针:
如: pin_ptr<BYTE> pBytes = & byteArray[0];
然后pBytes就可以当作原生的BYTE* 使用了
等代码执行完pBytes的有效范围,byteArray就会恢复可被GC处理的状态.
待续...
/**********************************************分割线**********************************************/
补一下心得:
区分C++和C#,可以直接说C#是托管代码,C++是非托管代码;而CLI就是它俩之间的胶水。所以:
1、C++层,应封装所有非基础头文件对外不可见,如#include <vector>这种的可以对CLI可见,但是,任何第三方的头文件不要暴露出去,做好一个壳类,对其封装
2、CLI层,每个CLI层的 ref 类,C++的类指针作为其成员变量,在 CLI 的构造函数中,new 出来对应的 C++类
3、C# 层的函数、内存等都可以转化为 C++ 的指针供其操作,这就需要对应的 马歇尔变换