マネージド配列からポインタを取得することが可能
byte [] buffer = new byte[length + byteAlignment];
GCHandle bufferHandle = GCHandle.Alloc(buffer, GCHandleType.Pinned);
IntPtr ptr = bufferHandle.AddrOfPinnedObject();
逆の方法はありますか。コピーせずにピン留めされたオブジェクトからバイト配列を取得しますか?
確かに、それMarshal.Copy
が目的です - 管理された状態と管理されていない状態の間でメモリを取得する方法はありません (まあ、いくつかの種類をコピーせずに方法はありません)...まあ、それは 100% 真実ではありませんが、私はあなたがそうしないと仮定していますWin32/C と p/invoke だけに依存してメモリをコピーするのは望ましくありません。
Marshal.Copy
使用は次のようになります。
IntPtr addressOfThing = ....;
byte[] buffer = new byte[...];
Marshal.Copy(addressOfThing, buffer, 0, bufferSize);