Как?Обратная совместимость двоичных файлов с VB6

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

yapetr
Начинающий
Начинающий
 
Сообщения: 18
Зарегистрирован: 29.06.2015 (Пн) 10:18

Как?Обратная совместимость двоичных файлов с VB6

Сообщение yapetr » 10.07.2015 (Пт) 12:14

Необходимо достигнуть обратной совместимости при чтении двоичных файлов между приложением, созданным в VB.net (Vs2008) и старым приложением, созданным в VB6.
Ситуация. В двоичном файле VB6 сохранен сложный пользовательский тип (структура) из строк, строковых массивов, числовых массивов переменной длины.
например:
так выглядело в VB6:
Type tMData
Fam As String
LatenTInSerLeft() As Long (в VB6 это допускалось, в VB.net - нет)
End Type
.....
Public MData As tMData
.....
ReDim MData.LatenTargInSerLeft(6, 42)
.........
для сохранения и извлечения из файла использовалась простая технология Put / Get

В VB 2008 это выглядит так:
Structure tMData
Dim Fam As String
Dim LatenTInSerLeft(,) As Integer (теперь нужно указывать количество измерений при объявлении структуры)
End Structure
...
Public MData As tMData
...
ReDim MData.LatenTargInSerLeft(6, 42)

Используется FilePut(1, MData) / FileGet(1, MData)

Проблема: Дебагер выдает сообщение: "Невозможно преобразовать объект типа "System.Int23[]" к типу "System.Int32[,]"."
При замене с Integer на Long или Short меняется только разрядность в сообщении дебагера с Int23, например, на Int64 или Int16, но смысл тот же.
Похоже, что FileGet неверно распознает размерность старого массива. Как это вылечить? Уверен, что проблема обратной совместимости не нова, но на форуме не нашел.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 11.07.2015 (Сб) 16:12

Ты бы хоть работающий код на VB6 привёл...

yapetr
Начинающий
Начинающий
 
Сообщения: 18
Зарегистрирован: 29.06.2015 (Пн) 10:18

Re: Как?Обратная совместимость двоичных файлов с VB6

Сообщение yapetr » 12.07.2015 (Вс) 9:55

Qwertiy писал(а):Ты бы хоть работающий код на VB6 привёл...

Задай, пожалуйста, вопрос конкретнее.
Это фрагмент кода из рабочей программы, показывающий логику объявления и инициализации пользовательского типа в VB6. Я думал, тут все понятно. ReDim, естественно, прописан в отдельной процедуре. Код расположен в программном модуле. VB6 позволяет неявно задавать размерность, определяя ее оператором ReDim. В VB.net, как я понял из комментариям к ошибкам, размерность требуется задать при объявлении переменной с помощью запятой в скобках. Да! в первом посте забыл прописать (для VB.net), что при загрузке первой формы я произвожу инициализацию переменных:
Public Sub Initialize()
ReDim LatenTargInSerLeft (0,0)
End Sub

По отдельности коды в VB6 и VB.net работают правильно. Файлы записываются и считываются. Но мне нужна обратная совместимость. Нужна подсказка, как правильно организовать загрузку файлов, созданных VB6 в VB.net?

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 12.07.2015 (Вс) 12:35

yapetr писал(а):Задай, пожалуйста, вопрос конкретнее.

Мне нужен код записи файла на VB6, чтобы было, подо что подгонять формат в VB.NET.

yapetr писал(а):Я думал, тут все понятно.

Да, идея понятна. Но код, который я написал на VB6, почему-то создаёт файл из двух ноликов без всего остального.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как?Обратная совместимость двоичных файлов с VB6

Сообщение Хакер » 16.07.2015 (Чт) 19:21

yapetr, у тебя есть сутки, чтобы отредактировать свои посты и оформить в них код соответствующими тегами.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 19

    TopList