閱讀 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;
    }