Есть код:
- Код: Выделить всё
Public Type SubStr
nx As Single
ny As Single
txy As Single
End Type
Public Type BasicStr
Untitled01 As Long
Untitled02 As Long
Untitled03 As Integer
Untitled04 As Integer
Untitled05 As Integer
SubMassiv() As SubStr
End Type
Sub AdvancedGetting()
Dim i As Long, j As Long
Dim Result() As BasicStr
Dim FileNumber As Integer
FileNumber = FreeFile
Open "C:\test.bnr" For Binary As #FileNumber
For i = 1 To 15
ReDim Preserve Result(1 To i)
ReDim Result(i).Submassiv(1 To 5)
Get #FileNumber, 1 + (i - 1) * 84, Result(i)
Next i
Close #FileNumber
End Sub
Этим кодом считывается бинарный файл структура которого известна (см. BasicStr): информация в файле идет блоками по 84 байт. Последение 60 байт - это динамический массив со структурой SubStr. Первые 14 из оставшихся в начале 24 байт предназанчены для Untitled0*, оставшиеся 10, как предполагается, расходуются на дескриптор, который (оператор Put) 2 + 8 * число_размерностей_динамическоего_массива, т.е. 2 + 8 * 1 = 10.
Все логично! Но оператор Get отказывается корректно считывать данные из файла. Значения переменных Untitled0* считываются верно, а массивы не только не заполняются, а даже очищаются, как после использования Erase.
Кроме того, если не указать конкретно номер байта с которого нужно считывать данные, то уже на второй проходке цикла появляется ошибка Out of Memory.
В чем может быть причина? Размер этого дескриптора одинаков для всех языков программирования или различается?