从历史上看,在Delphi中,Char类型实际上是ANSIChar类型的同义词.也就是说,一个字节代表ANSI代码页中的字符. 注意: 这是一种简化,忽略了在ANSI字符串中可能遇到的多字节字符引起的复杂性,但足以满足此答案.
这符合String类型实际上是ANSIString的同义词这一事实.
在Delphi 2009之后,这种情况发生了变化.
在Delphi 2009中,String和Char类型分别成为UnicodeString(具有附加功能的WideString)和WideChar的同义词,反映了作为字符串和字符类型的本机格式转换为Unicode.甲WideChar是表示Unicode的一个单个字符(或代理对的一半)2字节值.
因此,在Delphi 2009之前的Delphi版本中,以下两个变量是兼容的类型:
var
ach: ANSIChar;
ch: Char; // Synonymous with ANSIChar
Run Code Online (Sandbox Code Playgroud)
但是,在Delphi 2009及更高版本中,"ch"声明的含义发生了变化:
var
ach: ANSIChar;
ch: Char; // Synonymous with WIDEChar
Run Code Online (Sandbox Code Playgroud)
结果,ach和ch变量不再是兼容类型.
即你得到这个错误的原因是你有一些代码已经使用ANSIChar类型声明,而其他代码使用的是声明类型为Char的值.当使用旧版本的Delphi编译Char = ANSIChar时,两组代码兼容,但在Delphi 2009及更高版本的Char = WideChar中,两种类型(Char和ANSIChar)不兼容.