我似乎处于 catch 22 的情况。我想添加编译器版本相关代码。好的 - 这是非常标准的。但是 $IF 语句的语法因版本而异。
这是我想要实现的目标
{$IF CompilerVersion = 28}
if (fPendingObject = pObject) and (Addr(fPendingActionEvent) = Addr(pPendingActionEvent) ) then
{$ELSE}
if (fPendingObject = pObject) and (@fPendingActionEvent = @pPendingActionEvent ) then
{$ENDIF}
Run Code Online (Sandbox Code Playgroud)
这在 Delphi XE7 中编译,但不在西雅图或柏林编译。这些编译器需要语法
{$IF CompilerVersion = 28}
if (fPendingObject = pObject) and (Addr(fPendingActionEvent) = Addr(pPendingActionEvent) ) then
{$ELSE}
if (fPendingObject = pObject) and (@fPendingActionEvent = @pPendingActionEvent ) then
{$IFEND}
Run Code Online (Sandbox Code Playgroud)
($IFEND 而不是 $ENDIF)。但是 XE7 不会接受这种语法。
显然必须有一个技巧,确实 Delphi 2009 文档是这么说的,但是我可怜的大脑无法解决这个技巧。有人可以帮忙吗?
有一个编译器选项允许使用旧{$IFEND}指令:
然后是{$LEGACYIFEND ON|OFF}指令,它在本地执行相同的操作。设置为 on 将使 XE7 accept {$IFEND},就像在旧版本中一样。我经常使用类似的东西:
// For Delphi XE3 and up:
{$IF CompilerVersion >= 24.0 }
{$LEGACYIFEND ON}
{$IFEND}
Run Code Online (Sandbox Code Playgroud)
显然,此选项在您的西雅图或柏林项目中默认启用,但在 XE7 中不启用。您可以根据自己的喜好关闭或打开它。
| 归档时间: |
|
| 查看次数: |
1092 次 |
| 最近记录: |