2

我正在将一个非常旧(10 年以上)的应用程序升级到最新的 Delphi XE。我经常遇到很多错误

Incompatible types: 'WideChar' and 'AnsiChar'

我一直在将 char 转换为正确的类型:例如。AWideChar = WideChar(fncReturnsChar);

这会引起问题吗?

4

3 回答 3

6

你那里可能有问题。这是 Marco Cantù 的德尔福 Unicode 白皮书。

http://edn.embarcadero.com/article/38980

于 2011-02-14T21:12:57.223 回答
2
var
    Initials: String[10];
    FullName: String;

begin

    Initials[1] := FullName[1]; // Error here after Delphi 2009

end;

问题是 String[10] 在后来的 Delphi 版本中是 AnsiString 的类型。您将在上述代码中将 Unicode 字符分配给 ANSI 字符。

解决方案是一个简单的类型转换:

Initials[1] := AnsiChar(FullName[1]);

请参阅 Mikael Eriksson 的回答中推荐的文档。这是必不可少的。

于 2012-07-18T10:21:18.643 回答
2
var
  C : Char;
  AC : AnsiChar;
begin
  AC := '1';
  // C := AC; Delphi does not know how to convert ANSI to Unicode without a codepage
  C := String(AC)[1]; // Any way we can do that by default ANSI decoder
end.
于 2013-10-10T06:12:01.497 回答