Copy data from from IntPtr to IntPtr
c#, intptr
Solution
You can P/Invoke into the appropiate C function. That is probably the easiest way of doing that. Example:
class Program
{
[DllImport("kernel32.dll", EntryPoint = "CopyMemory", SetLastError = false)]
public static extern void CopyMemory(IntPtr dest, IntPtr src, uint count);
static void Main()
{
const int size = 200;
IntPtr memorySource = Marshal.AllocHGlobal(size);
IntPtr memoryTarget = Marshal.AllocHGlobal(size);
CopyMemory(memoryTarget,memorySource,size);
}
}
Problem
I have two `IntPtr` values pointing to some data areas of `length` bytes. `length` may have an order of magnitude of 200k to 400k. ``` int length = /* ..*/ IntPtr ptrSrc = /*.. */; IntPtr ptrDst = /* .. */; ``` Now I want to copy the data from `ptrSrc` to `ptrDst`. This code works fine: ``` byte[] data = new byte[length]; Marshal.Copy(ptrSrc, data, 0, length); Marshal.Copy(data, 0, ptrDst, length); ``` but it has the drawback of needing an additional temporary (potentially huge) array. Unfortunately, I could not find a `Marshal.Copy` variant in the .NET framework for copying directly from `IntPtr` to `IntPtr`, so I am looking for alternatives. I am interested in a solution which works on 32-bit Windows as well as 64-bit Windows. Any suggestions?