DYNAM および NODLL コンパイラー・オプションを使用してコンパイルしたプログラムで CALL literal ステートメントを使用した場合、 または NODLL コンパイラー・オプションを使用してコンパイルしたプログラムで CALL identifier ステートメントを使用した場合には、 動的呼び出しが発生します。
これらの形式の CALL ステートメントでは、呼び出される COBOL サブプログラムは、メインプログラムとはリンク・エディットされません。代わりに、それは独立したロード・モジュールにリンク・エディットされ、実行時にロードされます。ロードされるのは必要とされたとき (すなわち、呼び出されたとき) のみです。 PROGRAM-ID 段落または ENTRY ステートメント内のプログラム名は、プログラムを含んでいるロード・モジュールの、対応するロード・モジュール名または ロード・モジュール別名と同一でなければなりません。
動的 CALL ステートメントで呼び出される各サブプログラムは、別のロード・モジュール (システム・リンク・ライブラリーまたはユーザー指定の専用ライブラリーのメンバーである) の一部である場合があります。その場合、サブプログラムは MVS ロード・ライブラリーに置かれていなければならず、階層ファイル・システムに常駐させることはできません。動的 CALL ステートメントが、ストレージに常駐していないサブプログラムを呼び出すと、そのサブプログラムは、2 次ストレージから、メインプログラムを含む領域または区画にロードされ、そのサブプログラムへの分岐が実行されます。
実行単位内でサブプログラムへの最初の動的呼び出しが行われると、そのサブプログラムの新規コピーが獲得されます。 それ以後この同じサブプログラムを (元の呼び出し側または同じ実行単位内の他のサブプログラムによって) 呼び出すと、サブプログラムの同一コピーに最後に使われた状態で分岐されます (このサブプログラムが INITIAL 属性を処理する場合を除きます)。したがって、次の項目のどちらかを再初期化する必要があります。
同じ COBOL プログラムを別の実行単位で呼び出す場合、それぞれの実行単位ごとに WORKING-STORAGE の別個のコピーが割り振られます。
制約事項: 次のものを動的呼び出しすることはできません。
関連参照
DLL
DYNAM
ENTRY ステートメント (Enterprise COBOL 言語解説書)
CALL ステートメント (Enterprise COBOL 言語解説書)
言語環境プログラム プログラミング・リファレンス