[StructLayout(LayoutKind.Explicit, Pack = 2)]
public struct RCV_REPORT_STRUCTExV3
{
[FieldOffset(0)]
public System.UInt16 m_cbSize;
[FieldOffset(2)]
public System.UInt32 m_time;
[FieldOffset(6)]
public System.UInt16 m_wMarket;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 10)]
[FieldOffset(8)]
public char[] m_szLabelName;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
[FieldOffset(18)] //此处的偏移量位置应该设置为18的,但是报错:在18偏移位置包含一个对象字段,把偏移量设置为
//20程序正常,怎么回事。因为某些原因这个结构的内存大小需要固定,设置为20就会影响到其他字
//段,或者结构太大。先谢谢了!
public char[] m_szName;
大声告诉我数组这个算引用类型还是值类型?
引用类型需要额外4个字节用于引用(64位机器8字节)
但是布局设置为顺序:[StructLayout(LayoutKind.Sequential, Pack = 1)]
结构的内存计算是正常的。上面代码中字段内存相加sizeof=50,结构sizeof=50,是怎么回事?
@唯恐: LayoutKind.Sequential只保证有序但不保证是连续的。Explicit才保证在内存中的偏移位置和你指定的offset一致。