Copy data from from IntPtr to IntPtr

后端 未结 3 1604
广开言路
广开言路 2020-12-09 15:12

I have two IntPtr values pointing to some data areas of length bytes. length may have an order of magnitude of 200k to 400k.



        
相关标签:
3条回答
  • 2020-12-09 15:36

    I think the answer needs an update in .net 4.6 there is

     Buffer.MemoryCopy Method (Void*, Void*, Int64, Int64)
    

    This method copies sourceBytesToCopy bytes from the address specified by source to the address specified by destination. If the buffers overlap and the difference between destination minus source is less than sourceBytesToCopy, the source block is copied to the destination block in reverse order.

    So if you not on 4.6 or universal windows app 10 then use the previous answer.

    0 讨论(0)
  • 2020-12-09 15:43

    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);
        }
    }
    
    0 讨论(0)
  • 2020-12-09 15:49

    As user38000527 points out the modern answer is MemoryCopy and it is part of .NET core 1.0, .NET standard 1.3, and .NET framework 4.6.

    Here is how you use it in your context:

    Buffer.MemoryCopy(ptrSrc.ToPointer(), ptrDest.ToPointer(), length, length) 
    
    0 讨论(0)
提交回复
热议问题