我似乎陷入困境22。我想添加编译器版本相关的代码。好的 - 这是非常标准的。但是$ IF语句的语法在版本之间是不同的。
这是我想要实现的目标
{$IF CompilerVersion = 28}
if (fPendingObject = pObject) and (Addr(fPendingActionEvent) = Addr(pPendingActionEvent) ) then
{$ELSE}
if (fPendingObject = pObject) and (@fPendingActionEvent = @pPendingActionEvent ) then
{$ENDIF}
这在Delphi XE7中编译,但在西雅图或柏林不编译。那些编译器需要语法
{$IF CompilerVersion = 28}
if (fPendingObject = pObject) and (Addr(fPendingActionEvent) = Addr(pPendingActionEvent) ) then
{$ELSE}
if (fPendingObject = pObject) and (@fPendingActionEvent = @pPendingActionEvent ) then
{$IFEND}
($ IFEND而不是$ ENDIF)。但是XE7不接受这种语法。
显然必须有一个技巧,and indeed the Delphi 2009 documentation says so,但我的可怜的大脑无法解决问题。有人可以帮忙吗?
答案 0 :(得分:3)
有一个编译器选项允许使用旧的{$IFEND}
指令:
然后是{$LEGACYIFEND ON|OFF}
指令,它在本地执行相同的操作。将其设置为将使XE7接受{$IFEND}
,就像旧版本一样。我经常使用类似的东西:
// For Delphi XE3 and up:
{$IF CompilerVersion >= 24.0 }
{$LEGACYIFEND ON}
{$IFEND}
显然,此选项在您的西雅图或柏林项目中默认启用,但在XE7中不启用。您可以根据自己的喜好将其关闭或打开。