关于StructLayoutAttribute类的疑问
新换了一个工作,遇到了软件和硬件使用Socket交换信息,而信息形式则是使用的byte数组,但是在熟悉代码的时候,却发现了这么一段代码。
- C# code
/// <summary> /// 信息头 /// </summary> [Serializable] [StructLayoutAttribute(LayoutKind.Sequential,CharSet.Ansi,Pack=1)] public struct MessageHead { /// <summary> /// 功能码枚举 /// </summary> [System.Runtime.InteropServices.MarshalAs(UnmanagedType.U1,SizeConst=1)] public byte OperationCode; /// <summary> /// 数据类型 /// </summary> [System.Runtime.InteropServices.MarshalAs(UnmanagedType.U1,SizeConst=1)] public byte DataType; /// <summary> /// 帧ID号 /// </summary> [System.Runtime.InteropServices.MarshalAs(UnmanagedType.U2,SizeConst=2)] public ushort FrameID; /// <summary> /// 保留(存储返回结果) /// </summary> [System.Runtime.InteropServices.MarshalAs(UnmanagedType.U1,SizeConst=1)] public byte Retain; /// <summary> /// 数据长度 /// </summary> [System.Runtime.InteropServices.MarshalAs(UnmanagedType.U4,SizeConst=4)] public uint DataLength; }
实际效果是这个结构可以使用Marshal等类中的方法转换为一个byte数组,虽然知道了怎么使用,但是却不太明白是怎么一回事,在MSDN上也是很简单的写了一句话“类使用户可以控制类或结构的数据字段的物理布局”。
这个类到底是怎么样的一个机制,哪位高人可以给详细的说明一下,或者给一些相关的资料。
[解决办法]
非托管封送,如果帮助你还理解不了,我们也没有什么语言让你明白,你甚至可以记住他,知道什么时候用也可以