Интересно, как декодировать трехмерный динамический массив произвольного типа, записанный в бинарный файл на 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?