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



我想知道如何解码在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的这个链接帮助了我:http://www.codeguru.com/vb/gen/vb_misc/algorithms/article.php/c7495/How-Visual-Basic-6-Stores-Data.htm

相关内容

  • 没有找到相关文章

最新更新