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

时间:2010-01-12 11:43:16

标签: delphi unicode

我正在开发Delphi 7中的Word插件,但很快我会将其升级到Delphi 2010,如您所知,自2009年版Delphi引入新的字符串类型 UnicodeString 等于关键字字符串。另一方面,根据this thread,我们需要使用WideString与COM通信。

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

{$ifndef COMPILER_12_UP}
type
  UnicodeString = WideString;
  PByte = PAnsiChar;
{$endif COMPILER_12_UP}

4 个答案:

答案 0 :(得分: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提供的链接:Get ready for Delphi 2009 and up when developing with Delphi 7?

另外要强调的是:每个新版本的Delphi都试图保持某种程度的向后兼容性(包括Delphi 2009)。 如果您只是“正常”编码,则不太可能受到任何影响。事实上,反过来通常是正确的;你获得的花哨越多,就越有可能遇到问题。

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

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

答案 1 :(得分:3)

答案 2 :(得分:1)

您可以遵循一条简单的规则,使您在Delphi 7中编写的代码可以非常轻松地迁移到Unicode世界中:

不要假设任何地方 Char的大小为1.

换句话说,请始终使用

SizeOf(Char)而不是代码中的1。

如果您使用这个简单的规则进行编码,那么您的路径应该非常顺畅。完全可以编写将在两种环境中无需更改地编译的代码。

答案 3 :(得分:0)

(VST的奇数声明可能更像是{$ pointermath on}是D2009的事实,你不能在低版本中过度索引pbyte。它可能不是unicode相关的)