[ top ] [ prev ] [ up ] [ next ]

黄道編以降の変更

条件シンボル 'VCL' の導入

ひとつのソースで Delphi でも Kylix でもコンパイルできるように、条件シンボル 'VCL' を導入しました。

導入の理由

Delphi/Kylix の標準条件シンボルとして 'MSWINDOWS', 'WIN32', 'LINUX' が用意されていますが、これらはコンパイルするときの OS を示すためのもので、同一ソース上で VCL/CLX を切り替える用途には使えません。
そこで、VCL/CLX 混在ソース中で VCL を使う箇所を {$IFDEF VCL} {$ENDIF} で囲むことにしました。
'VCL' ではなくて 'CLX' を条件シンボルにしてもいいわけですが、CLX は Windows でも Linux でもコンパイルできますから、CLX をデフォルトとして考えたほうが将来的に良いだろうと判断しました。

設定の方法

Apollo で VCL を使う場合は必ず、全ての Apollo 関係のプロジェクトに条件シンボル 'VCL' を定義してください。
IDE ではメニューから [プロジェクト]->[オプション] を開き [ディレクトリ/条件] タブを選択します。そのタブシートにある [条件定義] に VCL と入力します。
コマンドラインではコンパイラオプションとして -DVCL を指定します。
一般的には IDE から設定したほうが楽です。IDE から設定すれば、IDE 用の設定ファイル .dof , コマンドライン用の設定ファイル .cfg の両方が更新されるからです。ちなみに Kylix では .kof , .conf が使われますから、影響ありません。

DefineCompoClass

Phi 拡張ライブラリでクラスを定義する際に、以前は次のようにしていました。
  RegisterClass(TDateTimePicker);
  PhiAllocFuncList.AddObject('TDateTimePicker', @DateTimePicker_alloc_v);
  cDateTimePicker := rb_define_class('DateTimePicker', ap_cWinControl);
  DefineProp(cDateTimePicker, TDateTimePicker);
今では次のように書けます。
  cDateTimePicker := DefineCompoClass(ap_mPhi, TDateTimePicker, ap_cWinControl, DateTimePicker_alloc_v);
Delphiクラス名を強制的にRubyクラス名として用いる(頭の "T" を取る)ことが難点といえば難点ですが、VCL/CLX と Phi との同一性を重視する立場からいえば推奨されるべき仕様でしょう。

Phi 拡張ライブラリにおける require 'phi' の事前チェック

すべての Phi 拡張ライブラリは、事前に require 'phi' しておくことが前提となります。
require 'phi' されていない場合に備えて、 Init_foo 定義の先頭では必ず
  if ap_mPhi = 0 then ap_loaderror('undefined Phi module');
このようにチェックを入れるようにしてください。
author: YOSHIDA Kazuhiro
[ top ] [ prev ] [ up ] [ next ]