[unsafe] какая то ерунда
От: SanyaVB  
Дата: 08.08.18 20:13
Оценка:
Приветствую всех!
Начну с простого кода
        [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


 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.