我们都知道struct是值类型,存放在栈中。经常会遇到将对象转换后传输的需求,今天,我们就将struct转换为字节流进行数据传输。
所包含的知识点如下,struct在内存中的物理布局、托管与非托管类型的交互。
struct在内存中的物理布局
CLR控制着结构体在内存中的物理布局。当需要将结构体传递至非托管代码时,则显示控制布局尤为重要。默认情况下,C#编译器使用顺序排列方式。
托管与非托管
简单来说,托管代码就是C#、F#等编译后的IL代码,由CLR执行。非托管代码就是C/C++编译后的指令代码。
在.NET中,可以使用System.Runtime.InteropServices.Marshal类对其进行操作。具体使用方法可参考MSDN。
思路
在C/C++中,可以直接把struct存放的内存复制到一个字节数组中,得到的就是真实内容。按照这个思路。
- 将托管内存中的struct传递到非托管内存;
- 将非托管内存中的内容传递回托管内存。
详细代码如下图所示:
本文暂时没有评论,来添加一个吧(●'◡'●)