我正在研究一个跨平台库,它应该在Delphi支持的桌面和移动编译器中进行编译。 我们知道桌面中的字符串是基于1的,移动是基于0的。 Delphi中是否有任何定义可用于分隔将在桌面和移动设备中编译的代码,并且至少向下兼容XE2。
更像是如果定义桌面会在移动设备上执行此操作。
抱歉格式错误。从手机输入。Delphi版本XE7上升1.
答案 0 :(得分:1)
此处记录了条件:http://docwiki.embarcadero.com/RADStudio/en/Conditional_compilation_(Delphi)
我认为您提出的问题的答案是您应该开启NEXTGEN
条件。
但是,仅仅因为您正在为移动设备进行编译(即NEXTGEN
)并不意味着字符串必须基于零。同样,桌面代码也没有强制性。可以使用$ZEROBASEDSTRINGS指令启用/禁用基于零的字符串。
你真的应该尽量避免条件编译。条件编译增加了显着的复杂性,使测试更加困难,并增加了缺陷风险。我强烈建议您尽可能避免条件编译。
因此,对于每个单位,您应该决定是基于零还是基于单位,并在该单位的顶部包含相应的指令。如果您打算使用基于一个的RTL函数,例如Pos
和Copy
,请基于一个。否则使用字符串助手(在XE3中引入)并且基于零。该决定与您的代码是否针对桌面或移动设备无关。
最后,你说你想在XE2上支持移动设备,但编译器有FreePascal,它使用一个基于字符串。支持XE2移动是另一层复杂性。