Delphi 10.2中未设置编译器指令

Delphi 10.2中未设置编译器指令,delphi,Delphi,我的delphi probject中有以下单元实现 uses {$IFDEF Ver270} JSON, {$ELSE} DBXJSON, {$ENDIF} 在DelphiXe4中,DBXJSON将被实现——这很好。 在Delphi中,将实现XE6 JSON——这也很好 但在Delphi10.2中,将实现DBXJSON,而不是JSON。为什么?这是Delphi 10.2中的一个bug吗?这不是bug,它是设计出来的。每个版本只有一个VERXXX定义VER270仅在XE6和XE6中定义。对于版本

我的delphi probject中有以下单元实现

uses
{$IFDEF Ver270} JSON, {$ELSE} DBXJSON, {$ENDIF}
在DelphiXe4中,DBXJSON将被实现——这很好。 在Delphi中,将实现XE6 JSON——这也很好


但在Delphi10.2中,将实现DBXJSON,而不是JSON。为什么?这是Delphi 10.2中的一个bug吗?

这不是bug,它是设计出来的。每个版本只有一个
VERXXX
定义<代码>VER270仅在XE6和XE6中定义。对于版本10.2,定义了VER320

在您的场景中,使用以下代码要简单得多:

uses
  {$IF RTLVersion >= 27} JSON, {$ELSE} DBXJSON, {$IFEND}
uses
  {$IFDEF DELPHIXE6_UP} JSON, {$ELSE} DBXJSON, {$ENDIF}
另一种选择是使用标准的include文件,如
jedi.inc
。这消除了这种条件语句的痛苦。如果您使用
jedi.inc
,那么您可以这样编码:

uses
  {$IF RTLVersion >= 27} JSON, {$ELSE} DBXJSON, {$IFEND}
uses
  {$IFDEF DELPHIXE6_UP} JSON, {$ELSE} DBXJSON, {$ENDIF}

注意,在这种情况下,使用
RTLVersion
而不是
compilervision
可能更有意义,因为这是一个RTL更改,而不是编译器更改。虽然这两个常量通常与同一个数字保持同步,但根据更新情况,它们有时可能会出现差异。@Remy谢谢,我已经更改了它