powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / как восстановить UDT из байтового массива
13 сообщений из 13, страница 1 из 1
как восстановить UDT из байтового массива
    #39149130
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня в байтовом массиве уложена вот такая структура


Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
Private Type DataXY
   x As Byte
   y As Long
End Type

Private Type Data2
   par1 As Variant
   par2 As DataXY
   par3 As Long
End Type

Private Type Struct
     arr() As Data2
End Type

Dim dt As Struct

---------------
заполнена к примеру такими данными

  ReDim dt.arr(1)

  dt.arr(0).par1 = "hello world"
  dt.arr(0).par2.x = 1
  dt.arr(0).par2.y = 2
  dt.arr(0).par3 = 1001

  dt.arr(1).par1 = 0.002
  dt.arr(1).par2.x = 3
  dt.arr(1).par2.y = 4
  dt.arr(1).par3 = 2002

---------------



Как теперь из байтового масссива восстановить UDT? Всякие трюки с CopyMemory не прокатывают.
...
Рейтинг: 0 / 0
как восстановить UDT из байтового массива
    #39149157
Казанский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Eolt, а каким образом структура "уложена"?
Если записать структуру в файл (по сути тоже байтовый массив), то потом можно прочитать с полным восстановлением, смотри в Locals:
Код: vbnet
1.
2.
3.
4.
5.
6.
Open "c:\temp\eolt.bin" For Binary As #1
Put 1, , dt     'записать структуру
Erase dt.arr    'очистить структуру
Seek 1, 1
Get 1, , dt     'считать структуру
Close 1
...
Рейтинг: 0 / 0
как восстановить UDT из байтового массива
    #39149177
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Укладывает процедура Put в файл. Читать его надо из байтового массива и парсить в структуру.

Код: vbnet
1.
2.
3.
4.
5.
  Open "data.bin" For Binary As #f
   If Err.Number = 0 Then
      Put #f, , dt
   End If
  Close #f
...
Рейтинг: 0 / 0
как восстановить UDT из байтового массива
    #39149258
Казанский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тогда как вариант (чтобы не заморачиваться тем, как бейсик записывает в файл массив и Variant/String) - записать байтовый массив во временный файл, считать из файла в структуру, удалить временный файл :)
...
Рейтинг: 0 / 0
как восстановить UDT из байтового массива
    #39149299
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Казанский,

такой вариант меня не устраивает
...
Рейтинг: 0 / 0
как восстановить UDT из байтового массива
    #39149619
ATM-TURBO 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Eolt,
Используй пайпы и пиши в них без промежуточного файла.
...
Рейтинг: 0 / 0
как восстановить UDT из байтового массива
    #39149631
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: vbnet
1.
 par1 As Variant



заменить на:
Код: vbnet
1.
 par1 As String * 255



тогда будет всё ок
...
Рейтинг: 0 / 0
как восстановить UDT из байтового массива
    #39149667
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ATM-TURBO 2Eolt,
Используй пайпы и пиши в них без промежуточного файла.

Пайпы через интернет не работают
...
Рейтинг: 0 / 0
как восстановить UDT из байтового массива
    #39149669
ATM-TURBO 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
EoltATM-TURBO 2Eolt,
Используй пайпы и пиши в них без промежуточного файла.

Пайпы через интернет не работают
Чего?
http://www.vbforums.com/showthread.php?807205-VB6-pipe-based-UDT-serializing-deserializing-InMemory
...
Рейтинг: 0 / 0
как восстановить UDT из байтового массива
    #39149694
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_One
Код: vbnet
1.
 par1 As Variant



заменить на:
Код: vbnet
1.
 par1 As String * 255



тогда будет всё ок

можно и на Byte заменить, тоже все будет работать, только к моей задачи это отношения не имеет
...
Рейтинг: 0 / 0
как восстановить UDT из байтового массива
    #39150184
Казанский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Eolt,
я записал структуру в файл, потом перетащил в Excel и проанализировал.
В принципе, можно распарсить. Самая большая сложность, конечно, с Variant. Здесь внутри Variant простые типы, а ведь может оказаться и массив (а если это массив Variant, то внутри какого-нибудь элемента тоже может быть массив и т.д.).
...
Рейтинг: 0 / 0
как восстановить UDT из байтового массива
    #39150416
ATM-TURBO 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Чем вариант с пайпами не устраивает? Тот же Get, Put только в память.
...
Рейтинг: 0 / 0
как восстановить UDT из байтового массива
    #39150424
ATM-TURBO 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Для распарсивания UDT нужно описание UDT. Вся фишка пайпов в том что VB6 сам все это делает, там правда есть траблы Unicode2Ansi, но это легко решить через байтовый массив вместо строки.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / как восстановить UDT из байтового массива
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]