Copy(IntPtr[], Int32, IntPtr, Int32)
메서드는 어떻게 작동하는지 알 수 없습니다. I는 (MSDN 상태로) 하나를 IntPtr로 여러 IntPtrs에 포함 된 데이터를 복사 할 수 있지만 예상대로 분명히 작동하지 않습니다하지만 :이 방법을 사용하고있는 경우Marshal.Copy, IntPtr 배열을 IntPtr에 복사
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);
사람이 알고 있나요 그것의 목적이 아닌 무엇인가?
IntPtr ptr = Marshal.AllocHGlobal (3 * sizeof (IntPtr)); – Guillaume
복사중인 것을 명심하십시오. 포인터가 가리키는 값이 아니라 포인터 값만 복사하는 것입니다. 임의로 Marshal.ReadByte (Marshal.ReadIntPtr (ptr), 0)는 해당 바이트를 반환합니다. 그러나 분명히 당신이 염두에 두었던 것이 아닙니다. –