我正在尝试将一些代码从 D2007 移植到 DXE2。这个简化的代码在 D2007 中编译得很好。在 DXE2 中显示此错误:
[DCC Warning] Unit1.pas(10): W1050 WideChar reduced to byte char in set expressions. Consider using 'CharInSet' function in 'SysUtils' unit.
[DCC Error] Unit1.pas(37): E2010 Incompatible types: 'AnsiChar' and 'Char'
可能是一个unicode问题。有人可以告诉我为什么会发生这种情况以及我应该如何纠正它?
问候
编码:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TSetOfChar = Set of Char; // Line 10
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
FCharacterSet: TSetOfChar;
public
property CharacterSet: TSetOfChar read FCharacterSet write FCharacterSet;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var
CharacterSet: TSetOfChar;
j: Integer;
s: String;
begin
CharacterSet := [];
s := 'I''m just testing åäö';
for j := 1 to Length(s) do
Include(CharacterSet, s[j]); // <- Line 37
end;
end.
编辑:请注意,我使用的是没有泛型的 Delphi 2007。我想要在 D2007 中仍然有效的代码,因为有很多代码可以移植到 Unicode。这是一个缓慢的过程。当一切都被移植,验证它与 XE2 一起工作时,我们可以使用 XE2 的东西,比如泛型。与此同时,我们照常维护 D2007,我们希望避免在版本控制系统中创建 XE2 分支。