gpt4 book ai didi

json - Delphi - 在修复 VCL 错误时,单元 x 是用不同版本的 x 编译的

转载 作者:行者123 更新时间:2023-12-03 15:56:23 25 4
gpt4 key购买 nike

我正在使用 Delphi XE6 并在我的项目中使用 Datasnap 和 JSON。我想纠正 VCL 单元 System.JSON.pas(在 TJSONString.ToString 函数中)中的一个错误,它应该转义反斜杠字符和引号。为了解决这个问题,我执行了以下操作:

  1. 将 System.JSON.pas 从标准 VCL 源文件夹复制到我的项目源文件夹
  2. 将 System.JSON.pas 添加到我的项目中(使用新复制的文件)
  3. 修复了错误并尝试编译

我收到错误“Unit Data.DBXCommon 是使用不同版本的 System.JSON.TJSONObject 编译的”

我可以看到 Data.DBXCommon 单元引用 System.JSON,所以我猜编译器现在看到 2 个版本 - 我的固定版本和标准 VCL 版本。

实现 VCL 更改以避免此问题的正确方法是什么?

最佳答案

此问题有两个常见原因:

  1. 您对设备的界面部分进行了更改。如果不重新编译使用您正在修改的单元的所有单元,则无法执行此操作。
  2. 您使用与最初构建该单元不同的编译器选项重新编译该单元。通过确保用于编译您修改的单元的编译器选项与 Embarcadero 使用的相同来解决这个问题。通常 Embarcadero 使用默认选项进行编译。将这些直接施加到正在修改的源文件中,位于文件的最顶部。

话虽如此,recent question here使用上面的选项 2 无法解决类似主题。在这个问题中,仅在 XE6 下,未修改的 Classes 单元根本无法重新编译和链接。这让我想知道这种特殊技术是否已经过时了。也许这根本不可能。在放弃之前,看看是否可以编译并链接未修改的单元。

更广泛地说,使用绕道通常是解决您遇到的此类问题的更简单的方法。使用绕行而不是重新编译可以使修复的管理更干净、更简单。

更新1

我无法重新编译和链接未修改的 System.JSON 单元。我认为这意味着另一个问题中提出的问题比仅仅类单元更广泛。我认为您会发现这是一个难以克服的棘手障碍,并建议您绕道而行。

更新2

XE6 中出现的问题似乎已在 XE7 的发布中得到解决。未修改的 System.JSON 单元将在 XE7 中编译和链接。

关于json - Delphi - 在修复 VCL 错误时,单元 x 是用不同版本的 x 编译的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24412299/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com