Необходимо достигнуть обратной совместимости при чтении двоичных файлов между приложением, созданным в 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 неверно распознает размерность старого массива. Как это вылечить? Уверен, что проблема обратной совместимости не нова, но на форуме не нашел.