温馨提示:本文翻译自stackoverflow.com,查看原文请点击:json - Delphi
delphi json vcl datasnap

json - 德尔斐

发布于 2020-03-27 16:06:30

我在项目中使用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更改的正确方法是什么?

查看更多

查看更多

提问者
Jonathan Wareham
被浏览
82
2017-05-23 20:20

此问题有两个常见原因:

  1. 您对设备的接口部分进行了更改。您必须先重新编译使用要修改的单元的所有单元,然后才能执行此操作。
  2. 您使用与最初构建单元时不同的编译器选项重新编译该单元。通过确保用于编译您修改的单元的编译器选项与Embarcadero所使用的相同,来解决此问题。通常,Embarcadero使用默认选项进行编译。将它们直接强加在要修改的源文件中,就在文件的最上方。

话虽这么说,上面的选项2无法解决有关类似主题最新问题在这个问题中,仅在XE6下,未经修改的Classes单元根本无法重新编译和链接。这让我想知道这种特殊技术是否已经存在。也许甚至不可能。放弃之前,请查看是否可以编译和链接未修改的单元。

更广泛地讲,使用绕行通常是解决您所面对的此类问题的简便方法。使用绕行而不是重新编译可以使修复程序的管理更加简洁。

更新1

我无法使未修改的System.JSON单元重新编译和链接。我认为这意味着在另一个问题中提出的问题不仅限于Classes单位。我想您会发现这是一个棘手的障碍,需要克服,建议您绕行。

更新2

XE6中似乎引入了该问题,而XE7发行版似乎已解决了该问题。未经修改的System.JSON单元将在XE7中编译和链接。