编译器指令-Delphi版本

编译器指令-Delphi版本,delphi,compiler-construction,compiler-directives,Delphi,Compiler Construction,Compiler Directives,我有一个单元是不久前用Delphi7编写的,刚从转换为DelphiXE(Unicode)中得到了乐趣(痛苦) 该单元在遇到一些问题后工作正常,如果我需要在更新其他代码的同时将IDE切换回Delphi7,我现在正在尝试使该单元与不同的Delphi版本兼容 我只有Delphi 7和Delphi XE,但从我收集的数据来看,Delphi 1到Delphi 2007编写的代码将被编译,但Delphi 2009及以上版本的代码将是Unicode …无论如何,在单元中,我将非unicode和unicode分

我有一个单元是不久前用Delphi7编写的,刚从转换为DelphiXE(Unicode)中得到了乐趣(痛苦)

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

我只有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版本


谢谢。

你最好看一看绝地计划中的一个,例如,看看他们是如何完成的。它们有共同的包含文件,这些文件确切地包含您感兴趣的详细信息。JVCL是另一个很好的选择…

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


Delphi文档列出了所有预定义的条件。版本条件的完整列表也在那里。

是的,jvcl公司是完美的。每个编译器指令都可以编写一些特定于版本的部分。+1,你更快了。如果OP只想通过Delphi的Unicode版本来分离代码,那么
Unicode
指令就是正确的。还有用于确定当前Delphi版本的CompilerVersion和RTLVersion。。。。除非过去有人使用过
UNICODE
。例如,为了解决Delphi本身缺乏Unicode支持的问题;)。。。不过,+1。。。如果可以保证
UNICODE
未被使用,您的解决方案看起来更干净。@状态\u访问\u被拒绝在这种情况下,应该更改定义和使用名为
UNICODE
的自定义条件的代码。@David:我不确定是否同意。在C/C++中,某些实体(定义和函数)通常以两个前导下划线开头,如果它们是特定于编译器的。Borland(等人)早就应该制定这样的规则了。他们一直在改变规则,破坏规则。特别是Unicode支持在这方面是一团糟。我仍然不明白忠诚的费城人怎么能保持如此平静;)。。。虽然我有时仍然使用Delphi,但我还是有点忘记了这一切。@STATUS尽管如此,它就是它,如果Emba定义了
UNICODE
,那么不管你喜欢与否,你都不需要这样做。