gpt4 book ai didi

delphi - 如何在编译时检测特定的 RTL 功能?

转载 作者:行者123 更新时间:2023-12-03 15:55:08 25 4
gpt4 key购买 nike

为了举例,让我们检查一下臭名昭著的 TStrings.StrictDelimiter :

{$IF Declared(TStrings.StrictDelimiter)}
{$MESSAGE WARN 'Beware of TStrings.StrictDelimiter which is False by default!'}
{$IFEND}

但是,Declared编译器内部报告条件行上的语法错误:E2029 ')' expected but '.' found 。 (在XE上测试)

最佳答案

对于 Delphi XE2,我使用这个:

{$IFDEF BDS9}
Result.VersionString := 'Delphi XE2 ' +
{$IF NOT DECLARED(Consts.SStyleFeatureNotSupported)}
'(original release version)'
{$ELSE} {$IF NOT DECLARED(FireMonkeyVersion)} // D2010 chokes when scope (FMX.Types) is mentioned!
'Update 1'
{$ELSE} {$IF NOT DECLARED(System.TestSSE)}
'Update 2'
{$ELSE}
'Update 3'
// TODO : Update this for any following update!
{$IFEND} {$IFEND} {$IFEND}
;
{$ELSE}
{$IFDEF BDS7}
Result.VersionString := 'Delphi 2010';
{$ELSE}
{$MESSAGE ERROR 'Extend this!'}
{$ENDIF}
{$ENDIF}

换句话说:我测试自任何特定的 delphi 版本以来引入的符号是否存在。相同的构造可用于设置变量或常量或编译器定义,因此进一步的代码可以使用它们。

注意:我为过去几年安装的所有 Delphi 版本的 Source 文件夹保留了备份。通过像 BeyondCompare 这样的工具放置这些文件夹并浏览差异文件,很快就会给你一些可以测试的符号......

关于delphi - 如何在编译时检测特定的 RTL 功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8920710/

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