我正在将一些古老的(来自2003年)Delphi代码升级到Delphi Architect XE,但是遇到了一些问题。我遇到了一些不兼容类型的错误。在Delphi 6中没有发生这些错误,因此我必须认为这是因为进行了升级。
说实话,我不知道PAnsiChar和PWideChar之间的区别,但是Delphi肯定知道区别,并且不让我编译。如果我知道它们之间的区别,也许我就可以弄清楚该使用哪种或如何修复此问题。
简述:在 Delphi 2009 之前,Delphi 中的本地字符串类型使用的是 ANSI CHAR:每个字符串中的 char 都表示为 8 位 char。从 Delphi 2009 开始,Delphi 的字符串变为 UNICODE,使用 UTF-16 符号:现在基本的 Char 使用了 16 位数据(2 字节),并且您可能不需要了解太多关于被表示为两个连续的 16 位 chars 的 Unicode 代码点。
8 位 chars 被称为 "Ansi Chars"。PAnsiChar 是指向 8 位 chars 的指针。 16 位 chars 被称为 "Wide Chars"。PWideChar 是指向 16 位 chars 的指针。 Delphi 知道这种区别,并且在不允许您混合使用两种字符时表现得很好!
更多信息
这是有关 Unicode 的一个流行的链接:每个软件开发人员都必须绝对、肯定地了解有关 Unicode 和字符集的绝对最低限度
您可以在此处找到有关将 Delphi 迁移到 Unicode 的更多信息:新白皮书:普通人的 Delphi Unicode 迁移
您也可以在 SO 上搜索 "Delphi Unicode 迁移"。
PChar
,则需要确保指针指向正确类型的数据,而编译器并不总是能够验证这一点。string
作为方便的字节数组缓冲区来保存任意数据,而不是保存文本的变量,则无法作为UnicodeString
。请确保将其声明为RawByteString
以解决问题。char
只有一个字节长。查看Delphi Unicode Migration for Mere Mortals获取更多技巧和建议,以使其正常工作。这并不像听起来那么困难,但也不是微不足道的。祝你好运!
String
和Char
,那么一切都应该正确地映射到正确的字符串类型... - Jørn E. Angeltveit