Quantcast
Channel: Common Language Runtime Internals and Architecture forum
Viewing all articles
Browse latest Browse all 1710

PtrToStructure failed to copy bytes if struct contains Boolean inside

$
0
0

I have following code

      static byte[] testBytes2 = { 49, 56, 58, 0, 123, 0, 0, 0, 1, 1, 1 };

      [StructLayout(LayoutKind.Explicit, Pack = 1)]
      internal unsafe struct fields_test
      {
         [FieldOffset(0)]
         public fixed byte a0[4];
         [FieldOffset(4)]
         public System.UInt32 a1;
         //[FieldOffset(8)]   // if you uncomment these lines variable a0 will not be filled!! only one byte will be copied!
         //public System.Boolean a2;
      }; 

      GCHandle handle = GCHandle.Alloc(testBytes2, GCHandleType.Pinned);
      fields_test test = (fields_test)Marshal.PtrToStructure(handle.AddrOfPinnedObject(), typeof(fields_test));
      handle.Free();

When you run it, bytes will be copied to structure correctly. BUT. If you uncomment last 2 lines, essentially adding one Boolean in the end of struct, first byte[] will not be filled with values anymore!!! only one byte will be copied!!

This seems like a bug inside PtrToStructure function !!!

here is result of first run:

test.a0 == [49,56,58,0 ]
test.a1 == 123

here is result of second run:

test.a0 == [49,0,0,0 ]
test.a1 == 123
test.a2 == True


Viewing all articles
Browse latest Browse all 1710

Latest Images

Trending Articles



Latest Images

<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>