Союзы в C #: члены структуры не кажутся выровненными
Я определил следующие структуры для эмуляции объединения C ++ (которое в конечном итоге будет использоваться для взаимодействия C ++):
[StructLayout(LayoutKind.Sequential)]
internal struct STRUCT1
{
public Guid guid;
public String str1;
public String str2;
}
[StructLayout(LayoutKind.Sequential)]
internal struct STRUCT2
{
public Guid guid;
public String str1;
public String str2;
public Int32 i1;
}
[StructLayout(LayoutKind.Explicit)]
internal struct MASTER_STRUCT_UNION
{
[FieldOffset(0)]
public STRUCT1 Struct1;
[FieldOffset(0)]
public STRUCT2 Struct2;
}
[StructLayout(LayoutKind.Sequential)]
internal struct MASTER_STRUCT
{
public MASTER_STRUCT_UNION Union;
}
Я написал следующий тестовый код, который присваивает значениеStruct1.guid
и тесты на равенство:Struct2.guid
class Class1
{
public static void Test()
{
MASTER_STRUCT ms = new MASTER_STRUCT();
bool match;
ms.Union.Struct1.guid = new Guid(0xffeeddcc, 0xbbaa, 0x9988, 0x77, 0x66, 0x55, 0x44, 0x33, 0x22, 0x11, 0);
Console.WriteLine("Struct1.guid:\t\t{0}\n", ms.Union.Struct1.guid.ToString());
Console.WriteLine("Struct2.integer:\t{0:x}", ms.Union.Struct2.i1);
Console.WriteLine("Struct2.guid:\t\t{0}", ms.Union.Struct2.guid.ToString());
match = ms.Union.Struct1.guid == ms.Union.Struct2.guid ? true : false;
}
}
ПочемуStruct2.guid
не равныйStruct1.guid
и вместо сегментаStruct2.guid
Значение s, кажется, смещается вStruct2.integer
? Все члены структуры, ИМО, похоже, выровнены.