如何在FieldOffset = 0的结构中创建数组字节?

时间:2016-11-16 06:14:50

标签: c# union marshalling

例如,我创建了byteArray,其中包含8个字节,并将其绑定到字段UlongValueDoubleValue

    [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)]用于此阵列?

0 个答案:

没有答案