gpt4 book ai didi

delphi - 如何在Delphi中定义版本 "and up"ifdefs?

转载 作者:行者123 更新时间:2023-12-03 14:35:25 26 4
gpt4 key购买 nike

我正在努力让 Log4D 在 Delphi XE4 中工作,并且遇到了一些编译错误,因为它在 use 子句中找不到 Contnrs,除非我将它移到定义它的 ifdef 之外。

{$IFDEF DELPHI5_UP}
Contnrs,
{$ENDIF}

稍微调查一下,发现 ifdef 是在包含的文件 Defines.inc 中定义的,该文件对于每个“受支持”的 delphi 版本都有一个 block ,它会停止几个版本:

例如:

{$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}

因此,虽然继续复制并粘贴 Delphi 2006 的 ifdef 并创建 Delphi XE4 block 很容易……但这似乎是一个不优雅的解决方案。这绝对不是面向 future 的……每个新版本都必须立即更新此文件,这样 Delphi 4 中不存在的某些代码不会使其他人 15 年以上的遗留代码崩溃。

所以我想知道是否有更好的方法来进行条件编译,这样它在编译该行时确实只检查您是否有“Delphi 5或更高版本”,而不是这种需要更新每个新版本的delphi的格式结果出来了。

最佳答案

IIRC,Delphi 6引入了条件表达式,这实际上是TLama建议的。为了使您的代码能够与低于该版本的 Delphi 版本一起工作,您必须检查 {$IFDEF CONDITIONALEXPRESSIONS } 。如果未定义,则必须使用旧的 VERxxx区分 Delphi 版本的方案。

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

针对最新编译器进行编码始终是一个好主意,并且仅使用条件部分来兼容旧版本。所以不要写{$IF CompilerVersion >= 26.0}{$IF CompilerVersion < 26.0} 的方式编写代码用来。因此,将来放弃对旧编译器版本的支持会更容易。

关于delphi - 如何在Delphi中定义版本 "and up"ifdefs?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23704097/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com