I can't figure out how does the Copy(IntPtr[], Int32, IntPtr, Int32)
method works.
I though it could copy the data contained in multiple IntPtrs into a single IntPtr (as MSDN states) but apparently it doesn't work as I expected:
IntPtr[] ptrArray = new IntPtr[]
{
Marshal.AllocHGlobal(1),
Marshal.AllocHGlobal(2)
};
Marshal.WriteByte(ptrArray[0], 0, 0xC1);
// Allocate the total size.
IntPtr ptr = Marshal.AllocHGlobal(3);
Marshal.Copy(ptrArray, 0, ptr, ptrArray.Length);
// I expect to read 0xC1 but Value is always random!!
byte value = Marshal.ReadByte(ptr, 0);
Does someone know if I'm using this method for something that it is not its purpose?
Read explanations in the comments.