我正在使用Delphi XE6,并在我的项目中使用Datasnap和JSON。我想在VCL单元System.JSON.pas(在TJSONString.ToString函数中)中纠正一个错误,该错误应转义反斜杠字符和引号。为了解决这个问题,我进行了以下操作:
我收到错误'Unit Data.DBXCommon已使用其他版本的System.JSON.TJSONObject进行编译'
[我可以看到Data.DBXCommon单元引用了System.JSON,所以我想编译器现在看到2个版本-我的固定版本和标准VCL版本。
实现VCL更改以避免此问题的正确方法是什么?
此问题有两个常见原因:
话虽如此,但使用上面的选项2无法解决关于类似主题的recent question here。在该问题中,仅在XE6下,根本无法重新编译和链接未修改的Classes
单元。这让我想知道这种特殊技术是否已经存在。也许甚至不可能。放弃之前,请查看是否可以编译和链接未修改的单元。
更广泛地讲,绕道行驶通常是解决您所面临的此类问题的简便方法。使用绕行而不是重新编译可以使修复程序的管理更加简洁明了。
更新1
我无法获得未修改的System.JSON
单元来重新编译和链接。我认为这意味着在另一个问题中提出的问题不仅限于Classes
单元。我认为您会发现这是一个棘手的障碍,需要克服,建议您绕行。
更新2
似乎已在XE6中引入的问题,似乎已通过XE7的发行版得以解决。未经修改的System.JSON
单元将在XE7中编译和链接。
如果Delphi XE6原始的System.JSON.dcu不是用Delphi XE6编译,而是用Delphi的早期版本之一编译的话。
[您声称通过更改源,然后重新编译System.JSON,您使用相同的方法设法在Delphi XE2中实现了修订。因此,我建议您首先在Delphi XE2和Delphi XE6随附的原始System.JSON文件之间进行比较。
如果它们相同,则您设法使用Delphi XE2重新编译的更改后的System.JSON.dcu可能也可以用于Delphi XE6。
我通过以下方式解决了类似问题:
删除不同版本的。dcu文件(即冲突文件)。
重新生成项目以创建新的.dcu文件。