加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

如何在Delphi中定义版本“和up”ifdefs?

发布时间:2020-12-15 10:15:32 所属栏目:大数据 来源:网络整理
导读:我正在努力使Log4D在Delphi XE4中工作,并且得到一些编译错误,因为它在uses子句中找不到Contnrs,除非我将它移动到定义的ifdef之外。 {$IFDEF DELPHI5_UP} Contnrs,{$ENDIF} 有一点调查发现,ifdef是在一个包含的文件Defines.inc中定义的,它对每个“支持”
我正在努力使Log4D在Delphi XE4中工作,并且得到一些编译错误,因为它在uses子句中找不到Contnrs,除非我将它移动到定义的ifdef之外。
{$IFDEF DELPHI5_UP}
  Contnrs,{$ENDIF}

有一点调查发现,ifdef是在一个包含的文件Defines.inc中定义的,它对每个“支持”的delphi版本都有一个块,它阻止了几个版本:

例如:

{$IFDEF VER170}  { Delphi 2005 }
{$DEFINE DELPHI9}
{$DEFINE DELPHI4_UP}
{$DEFINE DELPHI5_UP}
{$DEFINE DELPHI6_UP}
{$DEFINE DELPHI7_UP}
{$ENDIF}

{$IFDEF VER180}  { Delphi 2006 }
{$DEFINE DELPHI10}
{$DEFINE DELPHI4_UP}
{$DEFINE DELPHI5_UP}
{$DEFINE DELPHI6_UP}
{$DEFINE DELPHI7_UP}

因此,尽管如此,您可以轻松地复制并粘贴ifdef for Delphi 2006并创建Delphi XE4块…这似乎是一个不切实际的解决方案。这绝对不是未来的证明…每个新版本你必须去更新这个文件,所以Delphi 4中不存在的一些代码不会使别人的15岁的旧代码爆炸。

所以我想知道是否有更好的方法来进行条件编译,这样才能真正确定在编译该行时是否具有“Delphi 5或更高版本”,而不是需要更新每个出现的每个新版本的delphi的格式。

解决方法

IIRC,Delphi 6引入了条件表达式,这实际上是TLama建议的。要使您的代码使用下面的Delphi版本,您必须检查{$ IFDEF CONDITIONALEXPRESSIONS}。如果未定义,则必须使用旧的VERxxx方案来区分Delphi版本。

对于Delphi 6及更高版本,您可以使用内置的常量CompilerVersion和RTLVersion。你使用哪一个取决于你的代码。无论何时使用CompilerVersion的新编译器功能测试。对于与RTLVersion的RTL或VCL测试相关的任何内容。

对最新的编译器进行编码总是一个好主意,只能使用条件部分来兼容旧版本。所以代替编写{$ IF CompilerVersion> = 26.0}而不是以{$ IF CompilerVersion< 26.0}。因此,在将来,放弃对旧版本编译器的支持要容易得多。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读