Перевод структур в байты и обратно - Visual Basic .NET
Формулировка задачи:
Всем здравствуйте.
Тема вытекла из Записать в файл структуру двоичных данных
Код рабочий рабочий 100 % (Памирыч, Sklifosofsky).
Помогите вынести содержимое Form_load в отдельную функцию с двумя параметрами (структура,массив) по аналогии с fnBytesToStruct. Я пробовал, у меня не выходит. Физики происходящего в коде не понимаю.
Решение задачи: «Перевод структур в байты и обратно»
textual
Листинг программы
Imports System.Runtime.InteropServices Public Class Form1 <StructLayout(LayoutKind.Sequential, Pack:=1)> _ Structure StrCurrData Public t As Integer Public d As Short Public m As Short Public y As Short <MarshalAs(UnmanagedType.ByValArray, SizeConst:=100)> Public v() As Single End Structure Dim source As StrCurrData Dim dest As StrCurrData Dim ByteArray() As Byte Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load ReDim source.v(99) source.t = 65535 source.v(1) = 123.45 ByteArray = fnStructToBytes(source) End Sub 'из структуры в байты Private Function fnStructToBytes(ByVal MyStruct As StrCurrData) As Byte() Dim Buff() As Byte Dim size As Integer = Marshal.SizeOf(MyStruct) ReDim Buff(size - 1) Dim Ptr As IntPtr = Marshal.AllocHGlobal(Marshal.SizeOf(MyStruct)) Marshal.StructureToPtr(MyStruct, Ptr, False) Marshal.Copy(Ptr, Buff, 0, size) Marshal.FreeHGlobal(Ptr) Return Buff End Function 'Из байтов в структуру Private Function fnBytesToStruct(ByVal Buff() As Byte, ByVal MyType As System.Type) As Object Dim MyGC As GCHandle = GCHandle.Alloc(Buff, GCHandleType.Pinned) Dim Obj As Object = Marshal.PtrToStructure(MyGC.AddrOfPinnedObject, MyType) MyGC.Free() Return Obj End Function Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click dest = fnBytesToStruct(ByteArray, GetType(StrCurrData)) Label1.Text = dest.t.ToString Label2.Text = dest.v(1).ToString End Sub End Class
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д