Delphi 10.2中未设置编译器指令
我的delphi probject中有以下单元实现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中定义。对于版本
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谢谢,我已经更改了它