Приветствую всех!
Начну с простого кода
[StructLayout(LayoutKind.Sequential, Pack = 4)]
public struct Example
{
public bool a1;
public bool a2;
public bool a3;
public bool a4;
public bool a5;
public bool a6;
public bool a7;
public bool a8;
public bool a9;
}
static unsafe void Main(string[] args)
{
Example ex = new Example();
ex.a1 = true;
ex.a2 = true;
ex.a3 = true;
ex.a4 = true;
ex.a5 = true;
ex.a6 = true;
ex.a7 = true;
int size = Marshal.SizeOf<Example>();
IntPtr ptr = Marshal.AllocHGlobal(size);
Marshal.StructureToPtr(ex, ptr, false);
Example* exPtr = (Example*)ptr.ToPointer();
Example exNew = Marshal.PtrToStructure<Example>(ptr);
if(ex.a1== exNew.a1
&& ex.a2 == exNew.a2
&& ex.a3 == exNew.a3
&& ex.a4 == exNew.a4
&& ex.a5 == exNew.a5
&& ex.a6 == exNew.a6
&& ex.a7 == exNew.a7
&& ex.a8 == exNew.a8
&& ex.a9 == exNew.a9)
{
Console.WriteLine("OK");
}
else
{
Console.WriteLine("Error");
}
if (exPtr[0].a1 == exNew.a1
&& exPtr[0].a2 == exNew.a2
&& exPtr[0].a3 == exNew.a3
&& exPtr[0].a4 == exNew.a4
&& exPtr[0].a5 == exNew.a5
&& exPtr[0].a6 == exNew.a6
&& exPtr[0].a7 == exNew.a7
&& exPtr[0].a8 == exNew.a8
&& exPtr[0].a9 == exNew.a9)
{
Console.WriteLine("OK");
}
else
{
Console.WriteLine("Error");
}
}
Поясните мне пожалуйста, почему на консоль выводит следующие строчки:
OK
Error