[Serializable] // 指示可序列化 [StructLayout(LayoutKind.Sequential)] public struct Header { public uint aa; public uint bb; public uint cc; public uint dd; public ushort ee; public ushort ff; public ushort gg; public uint hh; public double ii; } [StructLayout(LayoutKind.Sequential, Pack = 1)] public struct SS { public uint jj; public float kk; public EA eA;//这是enum public ET eT;//这是enum public ET2 eT2;//这是enum public short ll; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 40)] // 声明一个字符数组,大小为40 public char[] mm; public SE sE; public float nn; public float oo; }
[StructLayout(LayoutKind.Sequential)] public struct SG { public Header header; public ushort pp; public byte qq; public byte ll; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 512)] public SS[] ss; }
现在在C#之间发送struct SG,内容接收正确, 如果用VC赋值后发送SG这个结构体 其中 public Header header; public ushort pp; public byte qq; 的值可正确接收。 public byte ll; 但是SS这个结构体中的数据都是不对的。现在赋值的时候只定义了SS[0]的值。 把Header前改为[StructLayout(LayoutKind.Sequential, Pack = 1)] 接收数据就只剩下 public uint aa; public uint bb; public uint cc; public uint dd; public ushort ee; public ushort ff; public ushort gg; 是正确的了。。。 高手能给解答一下为什么吗??是内存对齐的问题吗?如何解决呢。300分送上~