【问题标题】:Compiler Directives - Delphi Versions编译器指令 - Delphi 版本
【发布时间】:2012-01-06 09:39:35
【问题描述】:

我前段时间在 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}

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

{$IFDEF VER80,  //D1
        VER90,  //D2
        VER100, //D3
        VER120, //D4
        VER130, //D5
        VER140, //D6
        VER150, //D7}

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

谢谢。

【问题讨论】:

    标签: delphi compiler-construction compiler-directives


    【解决方案1】:

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

    Delphi 文档中有一个出色的topic 列出了所有预定义的条件。版本条件的完整列表也来自那里的linked

    【讨论】:

    • +1,你的速度更快。如果 OP 只想通过 Unicode 版本的 Delphi 分隔代码,那么 UNICODE 指令就是正确的。还有用于确定当前 Delphi 版本的 CompilerVersion 和 RTLVersion。
    • ...除非有人过去使用过UNICODE。例如,为了适应 Delphi 本身缺乏 Unicode 支持 ;) ...仍然,+1 ...如果可以保证 UNICODE 尚未使用,您的解决方案似乎更干净。
    • @STATUS_ACCESS_DENIED 在这种情况下,定义和使用名为 UNICODE 的自定义条件的代码应该更改。
    • @David:我不确定我是否同意。在 C/C++ 中,如果某些实体(定义和函数)是特定于编译器的,则习惯上以两个前导下划线开头。 Borland (et. al.) 早就应该制定这样的规则。他们一直在更改规则并破坏代码。特别是 Unicode 支持在这方面是/曾经是一团糟。我仍然不明白,忠诚的 Delphians 是如何保持如此冷静的 ;) ...虽然我有时仍然使用 Delphi,但我已经把所有这些都抛在脑后了。
    • @STATUS 不管怎样,它就是这样,如果 Emba 定义了UNICODE,那么不管你喜欢与否,你都不需要。
    【解决方案2】:

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

    【讨论】:

    • 是的,jvcl inc 是完美的。只有每个编译器指令都可以对一些特定于版本的部分进行编码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-27
    • 1970-01-01
    • 2014-10-19
    相关资源
    最近更新 更多