Imports System.Runtime.InteropServices Public Class Form1 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'initialisation d'une structure pour test reversible. Dim ms As struc1 = New struc1(9) ms.a = 255 ms.b = 1 ms.c(5) = 6 Dim data() As Byte = StructureToBytes(ms) Stop Dim newstruct As struc1 = BytesToStructure(data) Stop End Sub Private Function StructureToBytes(ByVal str As struc1) As Byte() Dim size As Integer = Marshal.SizeOf(str) Dim arr(size) As Byte Dim ptr As IntPtr = Marshal.AllocHGlobal(size) Marshal.StructureToPtr(str, ptr, True) Marshal.Copy(ptr, arr, 0, size) Marshal.FreeHGlobal(ptr) Return arr End Function Private Function BytesToStructure(ByVal arr() As Byte) As struc1 Dim str As struc1 = New struc1 Dim size As Integer = Marshal.SizeOf(str) Dim ptr As IntPtr = Marshal.AllocHGlobal(size) Marshal.Copy(arr, 0, ptr, size) str = CType(Marshal.PtrToStructure(ptr, str.GetType()), struc1) Marshal.FreeHGlobal(ptr) Return str End Function End Class <Serializable()> _ Public Structure struc1 Public a As Byte Public b As Byte <MarshalAs(UnmanagedType.ByValArray, SizeConst:=9)> _ Public c() As UShort Sub New(ByVal val As Integer) ReDim c(val) End Sub End Structure
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionPublic Structure struc1 Public a As Byte Public b As Byte <MarshalAs(UnmanagedType.ByValArray, SizeConst:=9)> _ Public c() As UShort Sub New(ByVal val As Integer) ReDim c(val) End Sub End Structure public structure struc3 public aa() as struct1 . . . end structure public enfin as struc3
Dim MaListeFinale As New List(Of struc1) For x As Integer = 0 To trame.Length - 1 Step 20 Dim arr(19) As Byte Array.ConstrainedCopy(trame, x, arr, 0, 19) MaListeFinale.Add(BytesToStructure(arr)) Next 'ici par exemple: MaListeFinale(1) représente la 2ème structure de la trame ...
Private Function StructureToBytes(ByVal obj As Object) As Byte() Dim size As Integer = Marshal.SizeOf(obj) Dim arr(size) As Byte Dim ptr As IntPtr = Marshal.AllocHGlobal(size) Marshal.StructureToPtr(obj, ptr, True) Marshal.Copy(ptr, arr, 0, size) Marshal.FreeHGlobal(ptr) Return arr End Function