Delphi2009では内部文字コードがすべてUniCode化されました。
この変化がDelphi2007以前からのDelphiコードの移植に多少の混乱を与えます。
もっとも変化が大きいのはやはりCOMやActiveXを操作する場合でしょうか。
COMやActiveXでは文字列型の意識的な変換が必要になります。
Delphi2009からの文字列型のポイント
pCharでの文字列渡しの部分は、Delphi2007までは内部はAnsi形式でした。
しかしDelphi2009ではWide形式に変わっています。
AnsiCharにキャストしないと動かない場合が多くなります。
たとえば
procedure HogeProc(Str: pChar);
というDllの内部関数があった場合、いままでは
HogeProc( pChar(HogeStr) );
とキャストしていましたが、Delphi2009からは
var HogeStr: String; HogeProc( PAnsiChar(HogeStr) );
としなければなりません。
pChar が pAnsiChar に変わっています。
DBとの文字列
また、これは未確認(私の環境でのみ成功している)情報ですが、UTF8のDBにデータを投入する際に、いままではEncodeUTF8を使っていた部分は、Delphi2009はそのまま投入しても大丈夫でした。
var SQL: String; SQL := ‘INSERT INTO test(name) VALUES (”テスト”) ‘; DB.ExecSQL( EncodeUTF8(SQL) );
としていたものが、
var SQL: String; SQL := ‘INSERT INTO test(name) VALUES (”テスト”) ‘; DB.ExecSQL( SQL );
でも正しく入りました。
これはまだ少量のデータでのみ(20万件ぐらい)で試しているので確かではないのですが、少し便利になっている可能性があります。漢字の文字化けはないようです。
業務で使う場合はもう少し確認が必要ですね。