Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / как восстановить UDT из байтового массива / 13 сообщений из 13, страница 1 из 1
17.01.2016, 18:20
    #39149130
Eolt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как восстановить UDT из байтового массива
У меня в байтовом массиве уложена вот такая структура


Код: 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
17.01.2016, 20:12
    #39149157
Казанский
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как восстановить UDT из байтового массива
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
17.01.2016, 21:09
    #39149177
Eolt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как восстановить UDT из байтового массива
Укладывает процедура 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
18.01.2016, 02:35
    #39149258
Казанский
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как восстановить UDT из байтового массива
Тогда как вариант (чтобы не заморачиваться тем, как бейсик записывает в файл массив и Variant/String) - записать байтовый массив во временный файл, считать из файла в структуру, удалить временный файл :)
...
Рейтинг: 0 / 0
18.01.2016, 09:03
    #39149299
Eolt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как восстановить UDT из байтового массива
Казанский,

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



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



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

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

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



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



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

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


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