例如,我创建了byteArray
,其中包含8个字节,并将其绑定到字段UlongValue
和DoubleValue
[StructLayout(LayoutKind.Explicit, Pack = 1, Size = 8)]
struct ULongStruct
{
[FieldOffset(0)]
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)]
public byte[] byteArray;
[FieldOffset(0)]
public ulong UlongValue;
[FieldOffset(0)]
public double DoubleValue;
}
不幸的是,我得到了例外: 汇编导致它包含具有偏移量0的对象字段,该字段与未呈现对象的字段溢出错误对齐
作为解决方案,我可以创建
[StructLayout(LayoutKind.Explicit, Pack = 1, Size = 8)]
struct ULongStruct
{
//[FieldOffset(0)]
//[MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)]
//public byte[] byteArray;
[FieldOffset(0)]
byte byteArray0;
[FieldOffset(1)]
byte byteArray1;
[FieldOffset(2)]
byte byteArray2;
[FieldOffset(3)]
byte byteArray3;
[FieldOffset(4)]
byte byteArray4;
[FieldOffset(5)]
byte byteArray5;
[FieldOffset(6)]
byte byteArray6;
[FieldOffset(7)]
byte byteArray7;
[FieldOffset(0)]
public ulong UlongValue;
}
但为什么我不能将[MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)]
用于此阵列?