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.
編集:ジェネリックを持たないDelphi2007を使用していることに注意してください。Unicodeに移植するコードがたくさんあるので、D2007でも機能するコードが必要です。これは遅いプロセスです。すべてが移植され、XE2で動作することを確認したら、ジェネリックなどのXE2を使用できます。その間、通常どおりD2007を維持し、リビジョン管理システムでXE2ブランチを作成することは避けたいと考えています。