C#でユニオンを表すには、StructLayout [LayoutKind.Explicit)]および[FieldOffset(x)]属性を使用して、ユニオン内のバイトオフセットを指定する必要があることを理解しています。ただし、表現したい次のユニオンがあり、FieldOffset属性はバイトのサイズだけオフセットされています。
union _myUnion
{
unsigned int info;
struct
{
unsigned int flag1:1 // bit 0
unsigned int flag2:1 // bit 1
unsigned int flag3:1 // bit 2
unsigned int flag4:1 // bit 3
unsigned int flag5:1 // bit 4
unsigned int flag6:1 // bit 5
.
.
.
unsigned int flag31:1 // bit 31
}
}
ユニオンの内部構造体でわかるように、少しオフセットできるものが必要なため、FieldOffsetを使用できません。
これに対する解決策はありますか?DLL関数を呼び出そうとしていますが、データ構造体の1つがそのように定義されていて、この結合構造体を最適に表現する方法についてのアイデアが不足していました。