TAKAさん、こんにちは。福士と申します。
> 2007で作成したアプリケーションをXE8に移植する際に
> Char型の集合体に文字を追加しようとしている
> Includeの部分で次のようなエラーになってしまいます。
> 「E2010 'AnsiChar' と 'Char' には互換性がありません」
> よろしくお願いいたします。
Delphi 2009のUnicode対応で、Char型はAnsiChar型(0..255)から
WideChar型(0..65535)にマッピングが変更されました。しかし集合型は
最大256要素までしか扱えないので、
| type
| TChars = set of Char;
は
| W1050 set 式で WideChar がバイト char に縮小されました。
| 'SysUtils' ユニットの 'CharInSet' 関数で使用することを
| 検討してください。
という警告メッセージとともに
| type
| TChars = set of AnsiChar;
に置き換えられています(ヒント、警告のメッセージを無視するのは
やめましょう)。
ですので、
| Include(FValidCh,Value[i]);
の第1パラメータはset of AnsiChar、第2パラメータはWideCharで
型が適合せずにエラーになっている、ということです。
修正方法はこのコードが何を意味しているかによって変わってきます。
もし対象になる(Valueに含まれる)文字がAnsiChar範囲だけなのであれば、
| Include(FValidCh,AnsiChar(Value[i]));
にするとか、そもそも
| Procedure Func(Value:AnsiString);
でよいと思います。一方でAnsiChar範囲に収まらない文字を含む文字列を
処理させるのであれば、65536ビット分のビット配列を用意して、文字に
よってそれぞれのビットをセットしていくようなコードを作る必要が
あります。
参考にしてください。
---
東洋テクニカルシステム株式会社 システム開発部 福士 光
Hikaru Fukushi (Toyo Technical System Inc.)
mailto:
fuk...@tts-inc.co.jp
MLホームページ:
http://www.freeml.com/delphi-users
----------------------------------------------------------------------
【無料で本格コーヒーマシンが使えます】
ご自宅用にもマシンが1台もらえます。
「ネスカフェアンバサダー」
少人数の職場でも大歓迎です。詳しくはWEBサイトをチェック!
http://ad.freeml.com/cgi-bin/sa.cgi?id=nceRa
------------------------------------------------------[freeml byGMO]--