如何将非托管内存数组复制到同一个非托管内存中

时间:2013-03-25 08:08:53

标签: c# memory copy unmanaged

我保留了10个128字节的内存

IntPtr dst = Marshal.AllocHGlobal (10 * 128);

IntPtr src1 = Marshal.AllocHGlobal (128);
// .... init scr1 from DLL
IntPtr src2 = Marshal.AllocHGlobal (128);
// .... init scr2 from DLL

我需要将src1src2的128字节元素复制到指定偏​​移量的dst

Marshal.Copy 不适合此类用途。 由于非托管内存区域中的srcdst

2 个答案:

答案 0 :(得分:5)

Window的API函数memcopy应该可以解决问题。

[DllImport("msvcrt.dll", EntryPoint = "memcpy",
    CallingConvention = CallingConvention.Cdecl, 
    SetLastError = false)]
public static extern IntPtr memcpy(IntPtr dest, IntPtr src, UIntPtr count);

另外,请检查一下:

https://stackoverflow.com/a/2658394/558018

正如它声称的那样,您可以使用unsafe上下文手动传输必要的字节。

答案 1 :(得分:2)

如果您想使用Windows API执行此操作,请使用MoveMemory

[DllImport("Kernel32.dll", EntryPoint="RtlMoveMemory", SetLastError=false)]
static extern void MoveMemory(IntPtr dest, IntPtr src, int size);