プログラムの呼び出し時の検索ロジック

制限事項:この情報はマネージ コードには該当しません。

プログラムを呼び出す際に、ランタイム システムはプログラムがすでにロードされているか、論理的にキャンセルされているかを確認します。すでにプログラムがメモリ上に展開されている場合、ランタイム システムはプログラムに制御を渡します。

プログラムがメモリ上に展開されていない場合、ランタイム システムは以下の順番でプログラムを検索します。
  1. COBPATH 環境変数に設定されているディレクトリ
  2. COBPATH が設定されていない場合、現行のディレクトリまたは PATH (.dll のみ)
  3. アプリケーションのディレクトリ
  4. 呼び出し元のプログラムを含むディレクトリ (呼び出し元のプログラムが .dll でない場合)

この検索シーケンスは、呼び出し元のプログラムのファイルにのみ該当します。これは他の形式のファイル (COBOL コピーブックなど) には該当しません。コピーブックの検索には、COBCPY 環境変数を使用します。

検索シーケンスの各段階では、呼び出し元のプログラムが明示的に指定された場合 (プログラムのベース名と拡張子を指定した場合)、指定した特定のファイルを検索します。呼び出し元のプログラムが暗黙的に指定された場合 (ベース名のみが指定され、拡張子が指定されていない場合)、ランタイム システムは次の順序で実行可能ファイルを検索します。

  1. ファイル名.dll (Windows) または ファイル名.so (UNIX)
  2. ファイル名.gnt
  3. ファイル名.int
  4. ファイル名.lbr
  5. ファイル名

最後のディレクトリまで検索しても実行可能ファイルが見つからない場合、ランタイム システムは「プログラムが見つかりません」というエラー メッセージを表示します。

検索対象がライブラリ ファイル (.lbr) の場合、ランタイム システムはライブラリ ファイルを開いて、実行可能なファイル ファイル名.ext を検索します。拡張子 .ext は、前述の他の実行可能なファイル タイプです (.dll ファイルを除く)

注:ドル記号 ($) がプログラム名の最初の文字で、そのプログラムが動的にリンクされるか動的にロード可能な場合は、プログラム名の最初の要素はファイル名マッピングで確認されます。プログラム名の最初の要素とは、最初のバックスラッシュ文字 (\) より前のすべての文字です。たとえば、ソースプログラムに
 CALL "$MYLIB\A"
という文が含まれる場合、プログラムの実行時に MYLIB 環境変数で定義されているパスからサブプログラム A がロードされます。