参考网上的方法,使用了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