从固定对象获取字节数组

时间:2013-01-03 14:49:54

标签: c# unmanaged managed

可以从托管数组中获取指针

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

有没有办法做相反的事情。从固定对象获取字节数组而不复制?

1 个答案:

答案 0 :(得分:1)

当然,这就是Marshal.Copy的用途 - 没有办法(好吧,没有办法不复制某些变种),否则就会在托管和非托管状态之间获得内存......好吧,这不是100%真实,但我假设你不想完全依赖Win32 / C和p / invoke复制内存。

Marshal.Copy使用看起来像:

IntPtr addressOfThing = ....;
byte[] buffer = new byte[...];
Marshal.Copy(addressOfThing, buffer, 0, bufferSize);