繁体   English   中英

如何在Delphi xe2中禁用unicode

[英]How to disable unicode in Delphi xe2

有没有办法做到这一点 ?

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

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

是否有编译器选项可以提供D2007兼容性。

在Delphi XE2(或任何大于2009的版本)中无法禁用UNICODE,但有许多资源可以帮助您迁移应用程序:

如果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别名为String=AnsiString 当我们使用Unicode时,每个VCL组件和每个采用字符串的VCL方法仍然需要一个字符串。 但是String现在是String=UnicodeString

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

非正式的黑客 ,但它会带来更多的问题解决。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM