在FreePascal/Lazarus中读取VB6三维数组

Reading VB6 three-dimensional array in 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)

数据按逻辑顺序保存。我能识别行和列,阅读也很顺利。

可是那个三维接触点图,每次都看不出来。我用 hexeditor 查看二进制数据,它以我无法理解的方式存储。

好的,我已经可以读取地形图,作为备份选项,我可以重新计算 FPC 中的接触点,更改格式并以非加密方式保存接触点图。顺便说一句,我只是出于速度原因将该信息存储在曲目文件中(在播放时读取该数组比计算它更快)。

我无法再使用 VB6。我只有代码和编译后的可执行文件。

但是有谁知道我将如何基本破译由 VisualBasic 6 编写的用户定义类型的三维动态数组?

表明我在研究中使用了损坏的数据。

而且我的尺寸不合适。

而且我不清楚我的算法中的维度顺序。

只有数组数据被保存到文件中,第一个维度在第一位编码,然后是第二个,依此类推。

三维数组的编码与其他所有多维数组一样简单。

来自 Marco van de Voort 的 link 帮助了我: http://www.codeguru.com/vb/gen/vb_misc/algorithms/article.php/c7495/How-Visual-Basic-6-Stores-Data.htm