微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我正在努力使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}。因此,在将来,放弃对旧版本编译器的支持要容易得多。

原文地址:https://www.jb51.cc/delphi/103361.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐