我最近遇到了这种数据类型不匹配的问题。这是我以前从未见过的。我希望有人可以解释这些是什么以及它们有何不同。
我得到的错误是 F2063。[DCC 错误] E2010 不兼容的类型:“AnsiChar”和“Char”
从历史上看,在 Delphi 中,Char类型实际上是ANSIChar类型的同义词。也就是说,单个字节表示 ANSI 代码页中的字符。 注意: 这是一种简化,忽略了多字节字符引起的复杂性,多字节字符可能在 ANSI 字符串中遇到,但足以满足此答案。
这与String类型实际上是ANSIString的同义词这一事实相对应。
在 Delphi 2009 以后,这种情况发生了变化。
在 Delphi 2009 中,String和Char类型分别成为UnicodeString(具有附加功能的WideString)和WideChar的同义词,反映了向 Unicode 作为字符串和字符类型的本机格式的过渡。WideChar是一个2 字节的值,表示 Unicode 的单个字符(或代理对的一半)。
因此,在 Delphi 2009 之前的 Delphi 版本中,以下两个变量属于兼容类型:
var
ach: ANSIChar;
ch: Char; // Synonymous with ANSIChar
然而,在 Delphi 2009 及更高版本中,“ch”声明的含义发生了变化:
var
ach: ANSIChar;
ch: Char; // Synonymous with WIDEChar
结果,ach和ch变量不再是兼容的类型。
即,您收到此错误的原因是您有一些使用ANSIChar类型声明的代码和其他使用Char类型声明的值的代码。当使用Char = ANSIChar的旧版本 Delphi 编译时,这两组代码是兼容的,但在 Delphi 2009 及更高版本中Char = WideChar,因此这两种类型(Char和ANSIChar)不兼容。