我在项目中使用Delphi XE6,并使用Datasnap和JSON。我想在VCL单元System.JSON.pas(在TJSONString.ToString函数中)中纠正一个错误,该错误应转义反斜杠字符和引号。为了解决这个问题,我进行了以下操作:
我收到错误“ Unit Data.DBXCommon已使用其他版本的System.JSON.TJSONObject进行编译”
我可以看到Data.DBXCommon单元引用了System.JSON,所以我想编译器现在看到2个版本-我的固定版本和标准VCL版本。
为避免此问题,实施VCL更改的正确方法是什么?
此问题有两个常见原因:
话虽这么说,但上面的选项2无法解决有关类似主题的最新问题。在这个问题中,仅在XE6下,未经修改的Classes
单元根本无法重新编译和链接。这让我想知道这种特殊技术是否已经存在。也许甚至不可能。放弃之前,请查看是否可以编译和链接未修改的单元。
更广泛地讲,使用绕行通常是解决您所面对的此类问题的简便方法。使用绕行而不是重新编译可以使修复程序的管理更加简洁。
更新1
我无法使未修改的System.JSON
单元重新编译和链接。我认为这意味着在另一个问题中提出的问题不仅限于Classes
单位。我想您会发现这是一个棘手的障碍,需要克服,建议您绕行。
更新2
XE6中似乎引入了该问题,而XE7发行版似乎已解决了该问题。未经修改的System.JSON
单元将在XE7中编译和链接。
大卫,您好,我认为我没有使用任何经过修改的编译器选项。有关XE6的注释可能很相关。我已经在XE2中成功实现了我的修复,我只是将项目迁移到XE6,这是我遇到的唯一问题。
感谢David,最后使用了绕行的方法,使用了这里的代码chee-yang.blogspot.co.uk/2008/11/hack-into-delphi-class.html。以前没有使用过此技术,但绝对喜欢使用此技术来复制VCL源文件。
在这个答案中绕行的代码仍然更简单:stackoverflow.com/questions/8978177/…