1

これを機能させようとしていますが、このエラーが発生します。

オフセット0にオブジェクトフィールドが含まれているため、非オブジェクトフィールドによって誤って整列またはオーバーラップされています。

[StructLayout(LayoutKind.Explicit)]
    public struct ListEntry {
        [System.Runtime.InteropServices.FieldOffset(0)]
        [MarshalAs(UnmanagedType.ByValArray, SizeConst=17)]
        public byte[] raw;
        [System.Runtime.InteropServices.FieldOffset(0)]
        public byte version;
        [System.Runtime.InteropServices.FieldOffset(1)]
        public UInt16 magic;
        [System.Runtime.InteropServices.FieldOffset(3)]
        public UInt32 start_time;
        [System.Runtime.InteropServices.FieldOffset(7)]
        public UInt16 run_id;
        [System.Runtime.InteropServices.FieldOffset(9)]
        public UInt16 channels;
        [System.Runtime.InteropServices.FieldOffset(11)]
        public UInt16 sampling_rate;
        [System.Runtime.InteropServices.FieldOffset(13)]
        public UInt32 start_sector;
    }
4

1 に答える 1

2

おそらく固定サイズのバッファとして?

[System.Runtime.InteropServices.FieldOffset(0)]
public fixed byte raw[17];

byte*これをコード内として扱う必要があることに注意してください。次に例を示します。

byte* ptr = x.raw;
// now copy / inspect / whatever from ptr
于 2012-10-22T10:50:49.117 に答える