天天看点

[VB.Net]获取对象的指针及结构体与字节数组间的相互转化

参考网上的方法,使用了GCHandle,http://blog.csdn.net/gxwxca/archive/2007/04/26/1585496.aspx,他的文章写得有点复杂,其实就是下面的两行

Dim GCH As GCHandle = GCHandle.Alloc(对象, GCHandleType.Pinned)

Dim tPtr As IntPtr = GCH.AddrOfPinnedObject

另外附上结构体与字节数组间相互转化的代码

''' <summary>

''' 结构体转换成字节数组

''' </summary>

''' <param name="oStructure">要转化的结构体</param>

Public Shared Function StructureToByteArray(ByVal oStructure As Object) As Byte()

Dim oSize As Integer = Marshal.SizeOf(oStructure)

Dim tByte(oSize - 1) As Byte

Dim tPtr As IntPtr = Marshal.AllocHGlobal(oSize)

Marshal.StructureToPtr(oStructure, tPtr, False)

Marshal.Copy(tPtr, tByte, 0, oSize)

Marshal.FreeHGlobal(tPtr)

Return tByte

End Function

''' <summary>

''' 字节数组转换成结构体

''' </summary>

''' <param name="arrByte">要转化的字节数组</param>

''' <param name="oType">要转化成的结构体类型</param>

Public Shared Function ByteArrayToStructure(ByVal arrByte() As Byte, ByVal oType As Type) As Object

Dim oSize As Integer = Marshal.SizeOf(oType)

If oSize > arrByte.Length Then Return Nothing

Dim tPtr As IntPtr = Marshal.AllocHGlobal(oSize)

Marshal.Copy(arrByte, 0, tPtr, oSize)

Dim oStructure As Object = Marshal.PtrToStructure(tPtr, oType)

Marshal.FreeHGlobal(tPtr)

Return oStructure

End Function