|
分類:[.NET 全般]
VS2008 64ビットOSにてKernel32.dllのCopyMemoryを使用する際に IntPtrからIntPtrの場合、うまく動作するのですが 構造体配列やByte配列からIntPtrの場合、コピーされません。 例外は発生していないのですがメモリでアドレスの中を見ると不定なデータがコピーされています。 64ビットでは特殊な記載が必要なのでしょうか?
[DllImport("Kernel32.dll", EntryPoint = "RtlMoveMemory")] internal static extern void CopyMemory(IntPtr Destination, IntPtr Source, [MarshalAs(UnmanagedType.U4)] int Length); [DllImport("Kernel32.dll", EntryPoint = "RtlMoveMemory")] internal static extern void CopyMemory(IntPtr Destination, ref byte Source, [MarshalAs(UnmanagedType.U4)] int Length);
IntPtr pDst = HeapAlloc(GetProcessHeap(),0x8, 256); byte[] rSrc = new byte[256]; CopyMemory(pDst,ref rSrc[0],rSrc.Length);
|