阅读 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;
}