使用Delphi 7进行开发时,为Delphi 2009做好准备吗?

Edw*_*Yip 5 delphi unicode

我正在Delphi 7中开发一个Word插件,但很快我会将它升级到Delphi 2010,因为你知道,因为2009版本Delphi引入了新的字符串类型UnicodeString,它等于关键字字符串.另一方面,根据这个线程,我们需要使用WideString与COM通信.

我的问题是,为了在将来开发Delphi 7时为Delphi 2010做好准备,我该怎么做?目前在我的代码中我使用了用户定义的类型UnicodeString,其想法是当使用D7编译时我的字符串是WideString,当使用D2009编译它的UnicodeString时,我看到Virtual TreeView使用这样的技术,如下面的代码:

{$ifndef COMPILER_12_UP}
type
  UnicodeString = WideString;
  PByte = PAnsiChar;
{$endif COMPILER_12_UP}
Run Code Online (Sandbox Code Playgroud)

Dis*_*ned 6

步骤1
通常您应该尽可能坚持使用"普通"类型:即字符串和字符
这样您的代码将在升级时"自动"转换.
注意:有一些特定于应用程序的例外.

如果你不这样做,你可能会遇到一个问题,我升级了一些代码库,在某些地方使用过AnsiString.当AnsiString = String时,这在旧Delphi中不是问题.但显然,当类型不再相同时,这是有问题的.

步骤2
阅读为迁移到Unicode Delphi 2009而提供的指南.它提到了在处理字符串时通常滥用的函数,因为假设每个字符都是1个字节.请注意这些,并根据这些建议编写代码.

步骤3,4和5
避免使用条件编译.你只会给自己带来更多麻烦.

步骤6,7,8,9和10
不要试图通过重新定义其内部类型来猜测编译器.你让自己暴露在许多头痛之中.问题是VCL,运行时库和第三方组件都对String的"理解"有所了解.升级到Delphi 2009时,仍然会分享"新理解".

如果您更改了该定义,那么由于隐式兼容性,旧版本中的某些内容仍然有效; 然而,在德尔福2009年的事情突然发生变化时,可能会有可怕的突破.

记得!使用的字符串类型是Windows API调用的重要考虑因素.Windows通常支持大多数功能的Ansi和Wide版本.在较旧的Delphi中,默认使用Ansi版本; 从Delphi 2009开始,默认使用Wide版本.

注意
关于您在COM开发中对WideString的关注:
旧版本的Delphi提供String和WideString之间的自动类型转换 - 让编译器尽可能地为您工作.显然你的COM接口必须用WideString声明,但是尽量避免使用它.

编辑
看看Hughes提供的链接:在使用Delphi 7进行开发时,为Delphi 2009做好准备吗?

还要强调的是:每个新版本的Delphi都试图保持某种程度的向后兼容性(包括Delphi 2009).如果您只是"正常"编码,那么您不太可能受到任何影响.事实上,反过来通常是正确的; 更看中你,你就越有可能要遇到的问题.

我搬到新版Delphi时遇到的唯一严重问题是:

  • 没有源代码的第三方代码/库.
  • 没有维护的第三方代码,他们的开发人员使用各种编码"技巧".
  • Delphi 3中的Midas代码是一项特别艰巨的升级.(但同样,开发人员绕过推荐的技术是一个罪魁祸首.)