1

マネージド配列からポインタを取得することが可能

byte [] buffer = new byte[length + byteAlignment];
GCHandle bufferHandle = GCHandle.Alloc(buffer, GCHandleType.Pinned);
IntPtr  ptr = bufferHandle.AddrOfPinnedObject();

逆の方法はありますか。コピーせずにピン留めされたオブジェクトからバイト配列を取得しますか?

4

1 に答える 1

1

確かに、それMarshal.Copyが目的です - 管理された状態と管理されていない状態の間でメモリを取得する方法はありません (まあ、いくつかの種類をコピーせずに方法はありません)...まあ、それは 100% 真実ではありませんが、私はあなたがそうしないと仮定していますWin32/C と p/invoke だけに依存してメモリをコピーするのは望ましくありません。

Marshal.Copy使用は次のようになります。

IntPtr addressOfThing = ....;
byte[] buffer = new byte[...];
Marshal.Copy(addressOfThing, buffer, 0, bufferSize);
于 2013-01-03T14:56:14.523 に答える