サブプログラムに関連して動的呼び出しを使用するかどうかの判断は、ロード・モジュールの場所、サブプログラムの呼び出しの頻度、サブプログラムのサイズ、保守の容易性、未使用状態のサブプログラムを呼び出す必要があるかどうか、AMODE 切り替えが必要かどうか、およびプログラム名がいつ認識されるか、といった要因によって左右されます。
動的に呼び出したいロード・モジュールは、階層ファイル・システムではなく MVS ロード・ライブラリーに入っている必要があります。
ほんの少しの条件でサブプログラムが呼び出される場合には、動的呼び出しを使用して、必要時にのみサブプログラムを取り込むことができます。
サブプログラムが非常に大きいか、あるいはその数が多い場合、静的呼び出しを使用すると、あまりにも多くの主記憶域を必要とする場合があります。使用する合計ストレージをより少なくするためには、2 つのサブプログラムを両方とも静的に呼び出すよりも、あるサブプログラムを呼び出してから取り消し、次に別のサブプログラムを呼び出してそれを取り消す必要があります。
保守を容易にすることに関心がある場合、動的呼び出しは役立ちます。 動的に呼び出されたサブプログラムが変更されても、アプリケーションを再度リンク・エディットする必要はありません。
INITIAL 属性を使用してサブプログラムが呼び出されるときに必ず未使用状態にすることができない 場合は、動的 CALL と CANCEL ステートメントの組み合わせを使用して未使用状態を設定できます。 最初に COBOL プログラムが呼び出したサブプログラムを取り消した場合、次に呼び出したとき、サブプログラムはその未使用の状態に再初期化されます。
CANCEL ステートメントを使用して、非 COBOL プログラムによって動的にロードして分岐したサブプログラムを明示的に取り消しても、そのサブプログラムのストレージを解放したり、そのサブプログラムを削除するための処置は取られません。
31 ビットのアドレッシング・モードで実行する必要がある Enterprise COBOL と同じ実行単位内に OS/VS COBOL プログラムまたはその他の AMODE 24 プログラムがある場合。 COBOL 動的呼び出し処理には、 AMODE 31 プログラムを呼び出す AMODE 24 プログラムの AMODE 切り替え (逆の場合も同じ) が含まれます。この暗黙の AMODE 切り替えを実行するためには、言語環境プログラムのランタイム・オプション ALL31(OFF) を使用する必要があります。 ALL31(ON) が設定されると、AMODE 切り替えは実行されません。
AMODE 切り替えが実行されると、制御権は呼び出し側から言語環境プログラムのライブラリー・ルーチンに渡されます。 切り替えの実行後、制御権は呼び出されたプログラムに移動します。ライブラリー・ルーチンの保管域は、呼び出し側プログラムの保管域と呼び出されたプログラムの保管域の間に位置付けられます。
呼び出されるプログラム名が実行時まで分からない場合、CALL identifier の形式を使用してください。ここで、identifier は、実行時に呼び出し先プログラムの名前が入れられるデータ項目です。 例えば、プログラム内での条件付き処理に応じて呼び出されるプログラムが異なるような場合には、CALL identifier を使用できます。NODYNAM コンパイラー・オプションを使用する場合でも、CALL identifier は常に動的です。
関連タスク
動的呼び出しの作成
関連参照
DYNAM
CALL ステートメント (Enterprise COBOL 言語解説書)
言語環境プログラム プログラミング・リファレンス