パッケージの構造を理解する
パッケージは以下のパーツで構成されます。
目次
パッケージの命名
パッケージは,プロジェクト内に同じ名前のものがあってはなりません。パッケージに Stats と名前を付けた場合,RAD Studioは,Stats.dpk というソースファイルを作成します。コンパイラはそれぞれ Stats.bpl と Stats.dcp と呼ばれる実行形式ファイルとバイナリイメージを作成します。別のパッケージの requires 節中のパッケージを参照したり,アプリケーション内でパッケージを使用するときは,単に Stats を使用します。
requires 節
requires 節は,現在のパッケージで使用される,その他の外部のパッケージを羅列します。requires 節に含まれる外部パッケージは,現在のパッケージと外部パッケージを両方とも使用するアプリケーションをコンパイルするときに自動的にリンクされます。
パッケージに含まれるユニットファイルがほかのパッケージのユニットを参照する場合,パッケージの requires 節に参照するパッケージを含めておく必要があります。参照する別のパッケージが requires 節から省かれている場合,コンパイラはそれらをパッケージの「暗黙で含まれているユニット」にインポートします。
メモ: ユーザーが作成するほとんどのパッケージには rtl が必要です。VCL コンポーネントを使用する場合は,vcl パッケージも含める必要があります。
パッケージの循環参照の回避
パッケージはその requires 節に循環参照を含むことはできません。つまり,
- パッケージは自分の requires 節内で自分自身を参照することができない
- 参照のチェインは,チェイン内のどのパッケージも再度参照することなく終了しなければなりません。たとえば,パッケージ A がパッケージ B を要求する場合,パッケージ B はパッケージ A を要求することができず,パッケージ A がパッケージ B を要求し,パッケージ B がパッケージ C を要求する場合,パッケージ C はパッケージ A を要求することができない
重複したパッケージ参照の処理
パッケージの requires 節(または,実行時パッケージ編集ボックス)の中で同じパッケージが複数回記述されている場合,コンパイラはそれを無視します。しかし,プログラミングの明確さと可読性が損なわれることがあるため,パッケージの重複参照は削除することをお勧めします。
contains 節
contains 節はパッケージに結合するユニットファイルを識別します。独自のパッケージを pas ファイルに記述している場合,そのソースコードを contains 節に含めます。
冗長なソースコード利用の回避
パッケージは,別のパッケージの contains 節に入れることができません。
パッケージの contains 節に直接含まれるすべてのユニット,またはそれらのユニットのいずれかに間接的に含まれるすべてのユニットは,コンパイル時にパッケージに結び付けられます。
1 つのアプリケーションにおいて,あるユニットは,直接的にも間接的にも 1 つのパッケージにしか含まれてはなりません。このことは IDE についても当てはまります。たとえば,vcl(VCL)に含まれているユニットを contains 節で直接指定しているパッケージは,IDE に組み込むことができなくなります。既存のパッケージに含まれているユニットを別のパッケージから使用するには,contains 節に記述するかわりに requires 節に,参照したいユニットを含む既存のパッケージを追加してください。