【问题标题】:Shapelib.dll does not work properly on Win 64 Platform (Delphi 10.3)Shapelib.dll 在 Win 64 平台 (Delphi 10.3) 上无法正常工作
【发布时间】:2022-01-27 10:13:15
【问题描述】:

Shapelib 是一个最初用 C 语言编写的库,它提供了编写用于读取、写入和更新 ESRI Shapefile 的简单程序的能力。

我设法在https://github.com/OSGeo/shapelib 的基础上为 32 位和 64 位编译 shapelib.dll,然后我想在 ShapeFileII.pas(可在该 repo 中获得)的帮助下测试它是否有效。

我使用的是 Delphi 10.3。我从 Win32 开始,我编写了一个简单的程序,它打开 .shp 文件并读取几何类型和坐标。一切都按照我的意愿进行。

然后我添加了Win64平台并想对其进行测试。不幸的是,程序在 Win64 上无法正常运行。我只能读取几何类型,坐标等其他信息大多为空。

有人尝试使用 shapelib 库吗? 你能给我一个提示吗?也许 Win 32/64 数据类型之间存在一些区别?

感谢任何形式的帮助。

更新

更准确地说,我添加了涵盖 Win32 和 Win64 上相同测试对象的屏幕截图。在 Win32 上运行给了我想要的值——我需要特别是 nVertices 和 padfX、padfY、padfZ。在 Win64 上运行会给我错误的 nVertices (0) 值和奇怪的单线位移(Win32 中的 padfX 现在是 Win64 中的 padfY)。

【问题讨论】:

  • Win 32/64 数据类型之间可能有一些区别? 是的,当然有,但也有两种类型大小相同的类型。您需要进行一些调试并检查究竟是什么失败了。然后将其添加到您的问题中。
  • 我们不能没有细节,minimal reproducible example

标签: delphi dll shapefile


【解决方案1】:

除了最终的 32/64 位相关问题,

ShapeFileII.pas

这是 20 年前的遗留代码。

我建议改用免费的ArcView ShapeFile OCX and DLL

包括 VB6 OCX 和 DLL、.NET 64 位特定和 AnyCPU DLL。

据我所知,Pascal 代码 sn-ps 曾经包含在库的文档中。

无论如何最好检查作者的存储库:

https://github.com/rosspickard/ArcShapeFile

【讨论】:

  • 非常感谢您的建议。实际上,在操作了一些变量的数据类型并在 Win32/64 之间改变它们的大小之后,我已经设法让我的程序在 Win64 上运行。
猜你喜欢
  • 2011-07-11
  • 1970-01-01
  • 1970-01-01
  • 2018-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多