编译器指令 - Delphi版本

11 delphi compiler-construction compiler-directives

我有一个我在Delphi 7中写过的单元,并且刚刚获得了转换为Delphi XE(Unicode)的乐趣(痛苦).

在遇到麻烦后,该单元工作正常,我现在正在尝试使该单元与不同的Delphi版本兼容,如果我需要在更新其他代码时将IDE切换回Delphi 7.

我只有Delphi 7和Delphi XE,但从我收集的Delphi 1编写的代码到Delphi 2007将编译,但Delphi 2009及以上的代码将是Unicode.

...无论如何,在单元中我将非unicode和unicode分开,如下所示:

{$IFDEF VER150} //Delphi 7
// code
{$ELSE IFDEF VER220} //Delphi XE
// code
{$ENDIF}
Run Code Online (Sandbox Code Playgroud)

如何修改编译器指令以使规则适用于多个版本?例如:

{$IFDEF VER80,  //D1
        VER90,  //D2
        VER100, //D3
        VER120, //D4
        VER130, //D5
        VER140, //D6
        VER150, //D7}
Run Code Online (Sandbox Code Playgroud)

如果我分发源或.dcu单元,这将覆盖所有Delphi版本.

谢谢.

Dav*_*nan 17

我想知道在这种情况下最简单的方法是在UNICODE条件上切换行为.当且仅当您使用Unicode版本的Delphi时,即在Delphi 2009及更高版本中,才定义此条件.这样做的最大优点是它是未来的证明 - 每次发布新的Delphi时都不需要更新代码.更重要的是,条件开关将更具可读性,因为它将清楚地表达意图.

Delphi文档有一个很好的主题,列出了所有预定义的条件.完整的版本条件列表也从那里链接.


0xC*_*22L 5

您最好的选择是查看众多JEDI项目之一,例如http://sourceforge.net/projects/jedi-apilib/,看看他们是如何做到这一点的.它们有共同的包含文件,其中包含您感兴趣的详细信息.JVCL是另一个不错的选择......