Delphi转换Unicode问题

我们有大型的商业应用程序,我们要从delphi6转换到2010年。约10第三方组件集,所有的源代码…我已经听到关于与2010年Unicode的警告 – 有没有人有经验和/或build议?

有许多可用的资源可供您阅读,并且您将协助从Delphi 6迁移到Delphi 2009/2010(Unicode)。

您可以使用这些文章作为指导。

  • 统一码迁移统计工具 (这个工具将有助于收集有用的统计数据,如何将旧的应用程序迁移到Unicode)。
  • Delphi 2009和Unicode
  • delphi2009年的string由示例解释
  • 将一个重大项目升级到Delphi 2009
  • Delphi和Unicode
  • Dr. Bob Delphi 2009 Unicode
  • Delphi 2009 – types库中的Unicode
  • Delphi 2009中的string和Unicode
  • delphi在Unicode世界第一部分:什么是Unicode,为什么你需要它,以及如何在Delphi中使用它?
  • delphi在Unicode世界第二部分:新的RTLfunction和类来支持Unicode
  • delphi在Unicode世界第三部分:统一你的代码
  • CodeRage 4:在您的程序中使用Unicode和其他编码

再见。

您会在这些StackOverflow问题中find一些有用的答案:

将项目从Delphi 3移到Delphi 2010

何时以及为什么要使用TStringBuilder?

将函数转换为delphi 2009/2010(unicode)

delphi2009/2010和Windows API调用的Unicode问题

另外,为了什么值得,我购买了Marco Cantu的Delphi 2009手册 。 我只需要几个星期就能从Delphi 4到Delphi 2009进行相对顺利的对话。

替代文字dh2009/D2009Handbook_small.jpg

但是,我确实build议您确保您的第三方软件包具有delphi2009版升级,否则您可能会遇到一些实际困难。 转换你自己的代码是一回事。 转换别人的是另一个。

我使用了两个第三方包,包含源代码。 两者都有升级可用,其中一个开发人员写道,他很复杂的组件升级到delphi2009年的Unicode。他花了几个月,但他完成了。 结果,当我升级时,我对自己的组件执行起了一点麻烦。

我最近也遇到过同样的情况。 你大多需要注意应用程序的“边缘”。 INI文件,文件I / O,日志文件等。由于他们已经连接了unicode API调用,所以赢得了来自delphi工作的API调用。 检查每个第三方组件设置,以确保他们至less已经准备好了delphi2009年…更好2010年。即使我使用数据库根本不是一个问题…几乎一切正常工作。 它只是没有什么大不了的。 任何依赖于angular色大小的东西都应该被审查。

真的是最关心的转型是2007年或者更早 – > 2009年或者更早。

有很多关于它的讨论/博客条目。 你可以阅读,阅读,阅读…或者你可以开始看看会发生什么。 (我做了一些)。 我确定有关于你的问题的“堆栈溢出”问题。 我不假装给出详细的描述。

它根本不像听起来那么可怕。

约10个第三方组件集,全部使用源代码。

我要补充的一件事是,如果组件不支持Delphi 2009/2010,不要尝试通过黑客代码升级它。

以下是我发布的新的stringtypes如何在Delphi 2009/2010工作? :

请参阅由MarcoCantù撰写的白皮书Delphi和Unicode ,我猜绝对的每个软件开发人员绝对肯定必须知道关于Unicode和字符集(无借口!) ,由Joel编写。

一个缺点是,默认的Win32 API调用已经被映射为使用W(宽string)版本而不是A(ANSI)版本,例如ShellExecuteA如果你的代码做了假指令代码,假设AnsiString内部布局,它会中断。 回退是用PAnsiCharreplacePCharPAnsiCharreplaceChar ,用AnsiStringreplacestring ,然后在Win32 API调用的末尾添加A代码。 代码实际编译并正常运行后,可以重构代码以使用stringUnicodeString )。

我必须把凯里·延森(Carey Jensen)的这篇文章join到其他人中。 它被贴上了标签:“delphi统一移徙:来自前线的故事和build议”(英文)。 free/delphiunicodemigration.pdf

正如你可以看到它的标题,你会发现许多经验和提示和技巧。 我认为这是你的问题的答案。 仔细阅读后,你一定知道下一步该怎么做。 🙂

find: http : //www.danysoft.com/productos/migrar-aplicaciones-a-delphi-xe-o-cbuilder-xe.html

还有一点需要注意的是,使用带有string的Varianttypes和用于string的VarType函数testing:需要使用varUString而不是varString。

假设AValue的types是Variant并且被分配了一个Unicodestring值,下面的行不通:

  if VarType(AValue) = varString then ... 

并需要改变

  if VarType(AValue) = varUString then ...