关于C++/CLI的一点小总结

最近在给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++ 的指针供其操作,这就需要对应的 马歇尔变换

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值