如何在Delphi xe2中禁用unicode

时间:2012-03-20 12:32:32

标签: delphi delphi-xe2

有办法做到这一点吗?

我目前正在使用2007而且我正在寻求升级,但是试图让这个新版本做任何事都非常令人沮丧。

xe2中char,strings和Pchar的新行为几乎杀死了我尝试过的每个应用程序和第三方组件。

是否有编译器选项可以兼容D2007。 ?

3 个答案:

答案 0 :(得分:14)

答案 1 :(得分:5)

如果Delphi 2009/2010 / XE / XE2(unicode版本)有“Ansi开关”,你只需交换现有的问题,就会出现更糟糕的问题。

因此,不能有开关。这个想法得到了仔细的讨论,我碰巧从与做出决定的人的第一手对话中得知,并且没有尽职调查就没有决定打破你的代码。根本没有别的办法。为了使Delphi成为真正的Unicode,别名String = UnicodeString是必不可少的。

因此,如果您希望使用单字节非unicode字符和字符串类型,则必须将所有String声明更改为AnsiString,将Char更改为AnsiChar在您的应用程序代码中在大多数代码中,在大多数地方,这都不是必需的。但是,如果您明确需要字节大小处理,例如RS232和RS485上的二进制协议,或二进制文件格式(EDA等),则需要更改代码。

如果您不想自己移植代码,请向某人付费。我自己移植了一个庞大的科学组件和应用程序库,我花了几周的时间来测试并发现所有的错误。之后,我有了一个合理的现代代码库,自2009年升级以来没有再次破坏。

当你进入XE / XE2分界时,你可能会遇到更多的痛苦,这与你的代码假设指针类型与Integer或Cardinal的大小相同,这在Win64中已不再适用。同样,德尔福人不想破坏你的代码,他们只是遵循理智的工程实践,在这种情况下,Win64决定某些事情。

为什么他们没有将每个VCL控件属性更改为USTRING而不是String?为什么他们不使每个RTL功能同时采用USTRING和STRING并提供过载?

因为规范的Delphi开发现在纯粹是Unicode。 USTRING是,并且将是一个特例。 String是本机(规范)字符串类型,实际上它现在也称为UnicodeString

事实上,您已经在使用类型别名了。 delphi 1.0中的字符串长度限制为255个字符。当他们引入Delphi 2.0和内部称为AnsiString的长字符串类型时,他们将现有的常见类型字符串别名为String=AnsiString。当我们使用Unicode时,每个VCL组件和每个采用字符串的VCL方法仍然需要一个字符串。但是String现在是String=UnicodeString

例如,Delphi 7已经有WideString。我们不需要中途移动到unicode。无论您是否意识到整个软件开发世界现在都希望字符串类型是unicode。德尔福是全球现象的一部分。互联网是unicode。您的Windows 7操作系统是纯本机unicode。

答案 2 :(得分:0)

unofficial hack,但它会带来更多可以解决的问题。