1 Imports System.Runtime.InteropServices 2 Imports System.IO 3 4 Module MdSftData 5 6 ‘ 256 bytes 7 Public Structure sSftDataHeader 8 ‘ 96 bytes 9 MarshalAs(UnmanagedType.ByValArray, SizeConst:= 8 ) 10 Dim bDate() As Byte 11 MarshalAs(U
1 Imports System.Runtime.InteropServices 2 Imports System.IO 3 4 Module MdSftData 5 6 ‘256 bytes 7 Public Structure sSftDataHeader 8 ‘96 bytes 9 <MarshalAs(UnmanagedType.ByValArray, SizeConst:=8)> 10 Dim bDate() As Byte 11 <MarshalAs(UnmanagedType.ByValArray, SizeConst:=8)> 12 Dim bTime() As Byte 13 <MarshalAs(UnmanagedType.ByValArray, SizeConst:=8)> 14 Dim bAID() As Byte 15 <MarshalAs(UnmanagedType.ByValArray, SizeConst:=8)> 16 Dim bEID() As Byte 17 <MarshalAs(UnmanagedType.ByValArray, SizeConst:=8)> 18 Dim bWeight() As Byte 19 <MarshalAs(UnmanagedType.ByValArray, SizeConst:=8)> 20 Dim bSexAge() As Byte 21 <MarshalAs(UnmanagedType.ByValArray, SizeConst:=32)> 22 Dim bComment() As Byte 23 <MarshalAs(UnmanagedType.ByValArray, SizeConst:=16)> 24 Dim bIMPID() As Byte 25 26 ‘8 bytes 27 Dim nSamplingRate As Short 28 Dim nChnums As Byte 29 Dim nDataMode As Byte 30 Dim type1 As Byte 31 Dim type2 As Byte 32 Dim type3 As Byte 33 Dim type4 As Byte 34 35 ‘48 bytes 36 Dim Cal1 As Short 37 Dim Upper1 As Short 38 Dim Lower1 As Short 39 Dim Base1 As Short 40 Dim wave_color_1 As UInteger 41 42 43 Dim Cal2 As Short 44 Dim Upper2 As Short 45 Dim Lower2 As Short 46 Dim Base2 As Short 47 Dim wave_color_2 As UInteger 48 49 50 Dim Cal3 As Short 51 Dim Upper3 As Short 52 Dim Lower3 As Short 53 Dim Base3 As Short 54 Dim wave_color_3 As UInteger 55 56 Dim Cal4 As Short 57 Dim Upper4 As Short 58 Dim Lower4 As Short 59 Dim Base4 As Short 60 Dim wave_color_4 As UInteger 61 62 ‘104bytes 63 <MarshalAs(UnmanagedType.ByValArray, SizeConst:=104)> 64 Dim dummy() As Byte 65 66 Public Sub New(ByRef size As Integer) 67 ReDim dummy(103) 68 69 ReDim bDate(8) 70 71 ReDim bTime(8) 72 73 ReDim bAID(8) 74 75 ReDim bEID(8) 76 77 ReDim bWeight(8) 78 79 ReDim bSexAge(8) 80 81 ReDim bComment(32) 82 83 ReDim bIMPID(16) 84 85 86 End Sub 87 88 89 90 End Structure 91 92 93 Public g_SH As sSftDataHeader 94 Public m_fn As FileStream 95 Public m_fr As BinaryReader 96 Public m_fw As BinaryWriter 97 98 99 100 ‘‘‘ <summary> 101 ‘‘‘ 结构体转换成字节数组 102 ‘‘‘ </summary> 103 ‘‘‘ <param name="oStructure">要转化的结构体</param> 104 Public Function StructureToByteArray(ByVal oStructure As Object) As Byte() 105 Dim oSize As Integer = Marshal.SizeOf(oStructure) 106 Dim tByte(oSize - 1) As Byte 107 Dim tPtr As IntPtr = Marshal.AllocHGlobal(oSize) 108 Marshal.StructureToPtr(oStructure, tPtr, False) 109 Marshal.Copy(tPtr, tByte, 0, oSize) 110 Marshal.FreeHGlobal(tPtr) 111 Return tByte 112 End Function 113 114 ‘‘‘ <summary> 115 ‘‘‘ 字节数组转换成结构体 116 ‘‘‘ </summary> 117 ‘‘‘ <param name="arrByte">要转化的字节数组</param> 118 ‘‘‘ <param name="oType">要转化成的结构体类型</param> 119 Public Function ByteArrayToStructure(ByVal arrByte() As Byte, ByVal oType As Type) As Object 120 Dim oSize As Integer = Marshal.SizeOf(oType) 121 If oSize > arrByte.Length Then Return Nothing 122 123 Dim tPtr As IntPtr = Marshal.AllocHGlobal(oSize) 124 Marshal.Copy(arrByte, 0, tPtr, oSize) 125 Dim oStructure As Object = Marshal.PtrToStructure(tPtr, oType) 126 Marshal.FreeHGlobal(tPtr) 127 Return oStructure 128 End Function 129 130 131 132 133 End Module