我保留了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
我需要将src1
和src2
的128字节元素复制到指定偏移量的dst
。
Marshal.Copy 不适合此类用途。
由于非托管内存区域中的src
和dst
。
答案 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);