[ top ] [ prev ] [ up ] [ next ]
Last-Modified:
2005/09/07
Delphi6 への移行
Delphi5 プロジェクトを Delphi6 プロジェクトに変換する
通常 Delphi5 プロジェクトは何もしなくても Delphi6 で開くことができ,コンパイルすることができる。
ただ,少し凝ったプログラムの場合,互換性のない Unit を使っていたり,互換性のない書き方になっていたりするので,少し修正する必要がある (Delphi ヘルプ『Delphi 6 へのアップグレード』) 。
修正の際に下位互換性を確保するために {$IFDEF VER140} (Delphi6) を使うべきだろうか。読みにくくなるので私はあまり {$IFDEF} を使いたくない。Delphi6 に移行したソースコードは Delphi6 専用ソースコードとしておきたい。CLX に移植すると必然的に {$IFDEF MSWINDOWS} {$IFDEF LINUX} が必要になるので,なおさら VER 指定は避けたい。が,デバッグの煩雑さを考えるとそうも言ってられないのが悩ましいところである。
- VER 定数
-
Delphi1 VER80
Delphi2 VER90
C++Builder1 VER93
Delphi3 VER100
C++Builder3 VER110
Delphi4 VER120
C++Builder4 VER125
Delphi5 VER130
C++Builder5 VER130
Delphi6 VER140
実行時パッケージ指定の変換
実行時パッケージを使うプロジェクトを Delphi5 から Delphi6 へ移行する際には,IDE で開くと自動的に変換がなされる。ここで下位互換性を確保するために *.dof と *.cfg を手動で変換したいと考える。
Apollo は Phi 拡張ライブラリを書いて require することができるので,究極的にはすべての実行時パッケージを使うことになる。しかし,Enterprise 版の実行時パッケージすべてを *.dof, *cfg に指定しておくと,Delphi6 Personal ユーザが ProjectApollo.bpg を構築する場合に,存在しない実行時パッケージを外さなくてはならなくなる。
配布先の版に合わせて設定を調節するために,変換スクリプトに版を指定できるようにする。
*.cfg の -LU, *.dof の Packages= の設定 (deploy.txt)
- Enterprise 版
vcl; rtl; dbrtl; adortl; vcldb; vclx; bdertl; vcldbx; ibxpress; dsnap; cds; bdecds; qrpt; teeui; teedb; tee; dss; teeqr; visualclx; visualdbclx; dsnapcrba; dsnapcon; VclSmp; vclshlctrls; vclie; vcljpg; xmlrtl; inet; inetdbbde; inetdbxpress; inetdb; nmfast; webdsnap; websnap; dbexpress; dbxcds; indy; dclOffice2k
- Professional 版
vcl; rtl; dbrtl; adortl; vcldb; vclx; bdertl; vcldbx; ibxpress; cds; bdecds; qrpt; teeui; teedb; tee; teeqr; visualclx; visualdbclx; VclSmp; vclshlctrls; vclie; vcljpg; xmlrtl; inet; inetdbbde; inetdbxpress; inetdb; nmfast; dbexpress; dbxcds; indy; dclOffice2k
- Personal 版
vcl; rtl; vclx; VclSmp; vclshlctrls; vcljpg
- 5to6.rb
-
(fail to include c:/apollo/tmp/5to6.rb)
CLX への移行
LINUX への移植を考えると,VCL から CLX への移行が必要になる。
移植は基本的にはそれほど難しくない。
- *.dfm を *.xfm に
- {$R *.DFM} を {$R *.xfm} に
- {$R *.RES} を {$R *.res} に
- unit の変換
Windows を Types に
Messages, ShellAPI は削除
Classes はそのまま
Forms を QForms に
Controls を QControls に
以下対応する unit に変換
VCL に存在して CLX に存在しないクラスや関数,特に Windows 固有の機能を使っている場合は,同一の機能を別の方法で実装する。移植が難しければ機能削減が必要になる。
例えば,Apollo では FileCtrl unit を外し (警告が出るため),Variants unit を追加する (Variant を使うため) 必要があった。Windows 固有の機能は削除した。
[ top ] [ prev ] [ up ] [ next ]