CRTPGM コマンドの使用

プログラムの作成 (CRTPGM) コマンドは、前に作成した 1 つ以上のモジュール、 および必要な場合には 1 つ以上のサービス・プログラムから プログラム・オブジェクトを 作成します。ILE モジュール作成コマンド、CRTRPGMOD、CRTCMOD、 CRTCBLMOD、または CRTCLMOD のいずれかによって作成したモジュールを バインドすることができます。
注: 必要なモジュールまたはサービス・プログラム (あるいはその両方) は、 CRTPGM コマンドを使用する前に作成しておかなければなりません。
CRTPGM コマンドを使ってプログラム・オブジェクトを作成する前に、以下のこ とを実行しなければなりません。
  1. プログラム名を決める。
  2. 1 つ以上のモジュールと、必要であれば、プログラム・オブジェクトにバインドしたい サービス・プログラムを識別する。
  3. 入り口モジュールを識別する。

    どのモジュールにプログラム入力プロシージャーが入っているかを、CRTPGM の ENTMOD パラメーターによって指示します。デフォルト値は ENTMOD(*FIRST) であり、MODULE パラメーターのリストで見つかった最初のプログラム入力プロシージャーを含むモジュールが入り口モジュールであることを意味しています。

    メイン・プロシージャーのモジュールが 1 つだけあるとします。すなわち、 1 つを除いてすべてのモジュールに NOMAIN が指定されていると仮定し、 ユーザーはデフォルト値 (*FIRST) を受け入れることができるとします。 二者択一的にユーザーは (*ONLY) を指定することができます。 この場合には、実際に 1 つだけのモジュールがメイン・プロシージャーを持っていることがチェックされます。 例えば、次の両方の状況において ENTMOD(*ONLY) を指定することができます。
    • main() 関数のない C モジュールを RPG モジュールにバインドする。
    • 2 つの RPG モジュールをバインドするが、1 つは制御仕様書に NOMAIN がある。
    注: メイン・プロシージャーに複数の ILE RPG モジュールをバインドしている場合には、プログラムが呼び出された時に制御を受け取りたいモジュールの名前を指定する必要があります。 また、メイン・プロシージャーのモジュールが MODULE パラメーターに指定さ れたリストのメイン・プロシージャーのその他のモジュールに先行する場合に は、*FIRST を指定することができます。
  4. プログラムを使用する活動化グループを識別する。

    ユーザーのプログラムに特殊な要件がないか、 あるいは使用するグループが確定していない場合には、 活動化グループ QILE を指定してください。 一般に、アプリケーションをそれ自身の活動化グループで実行するのが望ましいことです。 したがって、アプリケーション・プログラムの名前を付けた後に活動化グループの名前を付けることができます。

    CRTPGM のデフォルトの活動化グループが *NEW であることに注意してください。 これはプログラムがその自身の活動化グループで実行され、 活動化グループはプログラムが終了する時に終了することを意味します。LR を設定してもしなくても、 プログラムは次に呼び出された時にデータの新しいコピーをもちます。 活動化グループの詳細については、活動化グループの指定を参照してください。

CRTPGM コマンドを使ってプログラム・オブジェクトを作成するには、 次のステップを行ってください。
  1. CRTPGM コマンドを入力する。
  2. コマンド・パラメーターに適切な値を入力する。

表 1 は CRTPGM コマンドのパラメーターとそれらのデフォルト値をリストしたものです。CRTPGM コマンドおよびそのパラメーターについての詳細な説明は、Web サイト http://www.ibm.com/systems/i/infocenter/IBM® i Information Center の中の『プログラミング』カテゴリーの『CL および API』の節を参照してください。

表 1. CRTPGM コマンドのパラメーターとそのデフォルト値
パラメーター・グループ パラメーター (デフォルト値)
識別

PGM(ライブラリー名/プログラム名)
MODULE(*PGM)

プログラム・アクセス ENTMOD(*FIRST)
バインド

BNDSRVPGM(*NONE)
BNDDIR(*NONE)

実行時 ACTGRP(*NEW)
その他

OPTION(*GEN *NODUPPROC *NODUPVAR *WARN *RSLVREF)
DETAIL(*NONE)
ALWUPD(*YES)
ALWRINZ(*NO)
REPLACE(*YES)
AUT(*LIBCRTAUT)
TEXT(*ENTMODTXT)
TGTRLS(*CURRENT)
USRPRF(*USER)

CRTPGM コマンドを入力すると、システムは以下の処置を行います。
  1. リストされたモジュールをプログラム・オブジェクトになるものにコピー し、サービス・プログラムをこのプログラム・オブジェクトに連係する。
  2. プログラム入力プロシージャーが入っているモジュールを指定し、 このモジュールの最初のインポートを見つける。
  3. リストされている順序にモジュールをチェックし、最初のインポートを モジュール・エクスポートと突き合わせる。
  4. 最初のモジュールに戻り、次のインポートを見つける。
  5. 最初のモジュール内のすべてのインポートを分析解決する。
  6. 次のモジュールへ続け、すべてのインポートを分析解決する。
  7. すべてのインポートの分析解決が終わるまで、後続の各モジュール内のすべて のインポートを分析解決する。
  8. いずれかのインポートがエクスポートによって解決できない場合は、プログラム・オブジェクトを 作成せずにバインド処理は打ち切られる。
  9. すべてのインポートが解決されるとバインド処理は完了し、プログラム・オブジェクトが 作成される。
注: 変数またはプロシージャーをエクスポートするよう (EXPORT キーワードを使用して ) 指定した場合には、この変数またはプロシージャーの名前を、バインド済み プログラム・オブジェクト内の別のプロシージャーの変数またはプロシージャ ーと同じにすることが可能です。 この場合に予期しない結果となることが あります。 この状況の処理方法についての情報は、「ILE 概念」を参照してください。