4

128バイトのメモリを10個予約しました

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は、そのような目的には適していません。以来、srcアンマネージdstメモリ領域にあります。

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 に答える