2013-01-03 57 views
1

一個字節數組,它可以從託管陣列獲得從固定對象

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

獲得一個指針有沒有辦法做相反。從固定對象獲取一個字節數組而不復制?

+0

這需要不安全的代碼,所以你可以使用字節*(指針字節)。用這樣一個不會讓你的腿脫落的指針你可以做的很少。 –

回答

1

當然,這就是Marshal.Copy的原因 - 沒有辦法(好吧,沒有辦法沒有複製某種變種)以其他方式獲得託管狀態和非託管狀態之間的內存......好吧,這不是100%真實的,但我假設你不想僅僅依靠Win32/C和p/invoke來複制內存。

Marshal.Copy使用看起來像:

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