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?

Original source