4

我保留了内存 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

我需要将 128 字节的元素复制到src1指定的偏移量。src2dst

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

4

2 回答 2

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上下文手动传输必要的字节。

于 2013-03-25T08:15:38.133 回答
3

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

[DllImport("Kernel32.dll", EntryPoint="RtlMoveMemory", SetLastError=false)]
static extern void MoveMemory(IntPtr dest, IntPtr src, int size);
于 2013-03-25T08:49:15.097 回答