閱讀 Marshal 的結構
Marshal 類包含一個名為 PtrToStructure 的函式,該函式使我們能夠通過非託管指標讀取結構。
PtrToStructure 函式有很多過載,但它們都有相同的意圖。
通用 PtrToStructure :
public static T PtrToStructure<T>(IntPtr ptr);
T - 結構型別。
ptr - 指向非託管記憶體塊的指標。
例:
NATIVE_STRUCT result = Marshal.PtrToStructure<NATIVE_STRUCT>(ptr);
- 如果你在閱讀本機結構時處理託管物件,請不要忘記固定你的物件:)
T Read<T>(byte[] buffer)
{
T result = default(T);
var gch = GCHandle.Alloc(buffer, GCHandleType.Pinned);
try
{
result = Marshal.PtrToStructure<T>(gch.AddrOfPinnedObject());
}
finally
{
gch.Free();
}
return result;
}