Чтение трехмерного массива VB6 в FreePascal/Lazarus

Интересно, как декодировать трехмерный динамический массив произвольного типа, записанный в бинарный файл на VB6.

Пользовательский тип определяется следующим образом:

Type XYByte
    X As Byte
    Y As Byte
End Type

Он представляет собой две координаты точки контакта.

Трехмерный массив представляет предварительно вычисленные положения точек контакта для рельефа дорожки для мини-гольфа. Трек рассматривается как двухмерная карта высот. Для каждого возможного положения шара на карте вычисляются точки контакта, которых может быть больше для координаты карты, поэтому и третье измерение.

Dim ContactPointMap() As XYByte
ReDim ContactPointMap(Width - 1, Height - 1, MaxContactPointCount - 1)

Этот массив сохраняется в двоичный файл, который включает в себя эту форму дорожки.

Open FileName For Binary As #1
...
Put #1, , ContactPointMap()
...
Close #1

Хорошо, вот как я это сделал в VB6. Теперь я переписываю симулятор мини-гольфа в FPC/Lazarus и думаю, как расшифровать данные трехмерного массива, записанные VB6.

Интересно, что довольно просто прочитать двумерный массив значений с плавающей запятой "Single" точности, которые я использую как саму карту рельефа и как источник для расчета точки контакта:

Dim Map() As Single
ReDim Map(Width - 1, Height - 1)

Данные сохраняются в логическом порядке. Я могу распознавать строки и столбцы, и чтение идет хорошо.

Но судя по этой трехмерной карте точек соприкосновения, каждая попытка прочесть ее терпит неудачу. Я использовал шестнадцатеричный редактор, чтобы увидеть двоичные данные, и они хранятся таким образом, что я не могу понять.

Хорошо, я уже умею читать карту рельефа и в качестве запасного варианта могу пересчитать точки контакта в FPC, изменить формат и сохранить карту точек контакта в незашифрованном виде. Кстати, я сохранил эту информацию в файлах дорожек только из соображений скорости (читать этот массив во время воспроизведения было быстрее, чем вычислять его).

У меня больше нет доступа к VB6. У меня есть только код и скомпилированный исполняемый файл.

Но кто-нибудь знает, как бы я расшифровал трехмерный динамический массив определяемого пользователем типа, написанный VisualBasic 6?


person Cigydd    schedule 03.06.2015    source источник
comment
zetcode.com/lang/visualbasic/arrays или конкретно vb6: codeguru.com/vb/ gen/vb_misc/algorithms/article.php/c7495/   -  person Marco van de Voort    schedule 04.06.2015
comment
Марко, особенно вторая статья, кажется, много говорит о моей теме. Изучите, насколько это полезно для чтения данных из двоичных файлов.   -  person Cigydd    schedule 06.06.2015


Ответы (1)


Выясняется, что я использовал поврежденные данные для своего исследования.

И у меня были плохие размерные размеры.

И мне не был ясен порядок измерений в моих алгоритмах.

В файл сохраняются только данные массива, кодируя сначала первое измерение, затем второе и так далее.

Кодирование трехмерного массива такое же простое, как и любого другого многомерного массива.

Мне помогла эта ссылка от Марко ван де Воорта: http://www.codeguru.com/vb/gen/vb_misc/algorithms/article.php/c7495/How-Visual-Basic-6-Stores-Data.htm

person Cigydd    schedule 06.06.2015