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
内部布局,它会中断。 回退是用PAnsiChar
replacePChar
用PAnsiChar
replaceChar
,用AnsiString
replacestring
,然后在Win32 API调用的末尾添加A代码。 代码实际编译并正常运行后,可以重构代码以使用string
(UnicodeString
)。
我必须把凯里·延森(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 ...