title_parttitle_parttitle_part
静岡県浜松市であれこれソフトを開発している A.K.I Software のブログです。日々の開発日記やサーバー・セキュリティ関連の話題なども掲載。
<< 2024/04 >>123456789101112131415161718192021222324252627282930
《《《 ネットワーク機器の購入は Amazon で! 》》》
Powered by BLOM Delphi 2007 R2 から Delphi XE2 へのマイグレーション
小さくも大きくも閉じたりもしません
12/11/25 18:56 / 開発メモ

PMail Server2 の 64bit化の為、今まで開発に利用してきた Delphi 2007 から Delphi XE2 へのマイグレーションを行っています。(2007 で 64bitコンパイルできないから)
(間に Delphi 2009 や Delphi 2010 がありましたが、スルーしました。インストールしただけで殆ど利用していなかったり・・・)

Delphi 2007 とそれ以降の版で一番大きく違うのは、文字列の扱いが大幅に変更されています。

Windows の内部処理が Unicode になっていますので、当然と言えば当然なんですが、2007 までは Ansi(SJIS) だった文字列が Unicode に完全に置き換えられています。

普通のアプリなんかは、深く考えずにリコンパイル出来ますし、DB なんかの扱いも SJIS では無く Unicode に変更してやれば大抵動く訳ですが。

うちの場合、非常に困ったことに。

私は通信関連のソフトを作ることが多いんですが、通信世界は Ansi なんですよ。Unicode で通信することは殆ど無い訳です。

今まで作ってきた膨大な量のライブラリは Ansi で作っていますので、これを Unicode に対応・・・すぐに出来る訳ないです。(^-^;

System.AnsiStrings というライブラリを組み込むことによって Ansi の扱いはある程度出来るんですが、完全では無いので IntToStr とか、割と良く使うにも関わらず対応していない Common ライブラリが大量に。

(IntToStrの帰り値は String なんですが、実際の中身は 2007 では Ansi String, XE2 では Unicode String になります。JavaScript でバージョンによって int の中身が Int になったり、WORD になったりするレベルのインパクトです。なんでこんな言語仕様にしたのか・・・)

PMail Server2 を試しにリコンパイルしてみた所、数百のエラーと数千の警告が発生 orz

取りあえず数百発生しているエラーを悉く潰して、コンパイルが通った所で実行してみましたが、まともに動作しません。

1個づつ関数レベルで動作確認しつつ移植作業を行っていますが、更に事情があり、32bit版は Delphi 2007 で継続して開発、64bit版は Delphi XE2 で開発を行いたいと考えていますので(XE2 が作る EXE は大きすぎます・・・)同一ソースで Ansi と Unicode を通したいのです。

最終的に取った方法は、条件コンパイルで Ansi / Unicode を切り替えて同一コードで通す茨の道です。(^-^;
ということで、自作ライブラリで IntToAnsiStr なんて関数を作って、IFDEF VER185 を大量に書いています。

function AIntToStr(Value: Integer):AnsiString;
begin
{$IFDEF VER185} ← Delphi 2007 なら以下を通過
Result:=IntToStr(Value); ←標準関数
{$ELSE}
Result:=IntToAnsiStr(Value); ←自作関数(XE2用)
{$ENDIF}
end;

当然、親コードでは IntToStr() と書いている箇所を全て AIntToStr() に置換する作業が待っていますが。

あとは、TStringList の代わりに TAnsiStringList とか。
(Delphi やっている人じゃないと意味がわからんですね)

バグを含みやすい方法なんですが、現状としてはこの方法しか無いかなぁ、と。

最終的には全て Unicode で書き直す必要が出てくるとは思いますが、当面はこの方法で凌ごうと思います。

[更新日付:2012/11/25 18:56:09]
トラックバックを見る(0)
Log Link [https://akisoftware.com/cgi-bin/blom.exe?akisoft+sl+8c81eb95bf3d699acfc241531607efe826e2e583]
TB Link [https://akisoftware.com/cgi-bin/blom.exe?akisoft+tb+8c81eb95bf3d699acfc241531607efe826e2e583]

記事へのコメント

コメントはありません

名前
コメントキー
 
コメントする時はキーを正確に入力して下さい
コメント
アドレスを含んだコメントはできません
© 2008-10 A.K.I Software all rights reserved.