Есть такая структура с полями. Все поля имеют структуру. И есть одно поле которое является байтовым массивом.
[FieldOffset(0)]
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)]
public byte[] Test;
[FieldOffset(0)]
public Register32 Header;
[FieldOffset(4)]
public Register32 NumberPack;
[FieldOffset(8)]
public Register32 Command;
[FieldOffset(12)]
public Register32 Button;
[FieldOffset(16)]
public Register32 Checksum;
[FieldOffset(20)]
public Register32 ReserveA0;
[FieldOffset(24)]
public Register32 ReserveA1;
[FieldOffset(28)]
public Register32 ReserveA2;
[FieldOffset(32)]
public Register64 RC0;
[FieldOffset(40)]
public Register64 RC1;
[FieldOffset(48)]
public Register64 RC2;
[FieldOffset(56)]
public Register64 RC3;
[FieldOffset(64)]
public Register32 ReserveB0;
[FieldOffset(68)]
public Register32 ReserveB1;
[FieldOffset(72)]
public Register32 ReserveB2;
[FieldOffset(76)]
public Register32 ReserveB3;
[FieldOffset(80)]
public Register32 ReserveB4;
[FieldOffset(84)]
public Register32 ReserveB5;
[FieldOffset(88)]
public Register32 ReserveB6;
[FieldOffset(92)]
public Register32 ReserveB7;
[FieldOffset(96)]
public Register32 ReserveB8;
[FieldOffset(100)]
public Register32 ReserveB9;
[FieldOffset(104)]
public Register32 ReserveBA;
[FieldOffset(108)]
public Register32 ReserveBB;
[FieldOffset(112)]
public Register32 ReserveBC;
[FieldOffset(116)]
public Register32 ReserveBD;
[FieldOffset(120)]
public Register32 ReserveBE;
[FieldOffset(124)]
public Register32 ReserveBF;
Только проблема возникла. Компилятор выдаёт исключение с проблемой выравнивания. Но без данного поля Test работает нормально, выравнивание работает правильно. Но мне нужно чтобы эти все поля разбились на байтовый массив. Проверял для проверки вместо Register32/64 uint и ulong - всё также ошибка.
P.S. Похоже, это возможно только в небезопасном контексте.