制約事項: 本トピックは Windows 環境にのみ該当します。
モジュールを実行時に動的にリンクする場合、次の 2 つの選択肢があります。
- 呼び出し側モジュールをコード化して、呼び出されたモジュールがすでに利用可能かどうかを確認できます。この方法では、モジュールを静的にリンクするオプションを保持する場合があります。別のモジュールを呼び出す各呼び出し側モジュールでは、最初に外部参照アドレスをテストし、そのアドレスがゼロの場合、外部参照フィールドにアドレスを確保する LOAD をモジュールに発行してから、BALR を発行して、呼び出されたモジュールに移動します。この方法では、実行可能プログラムのビルド時にリンカー指令 NCAL も指定する必要があります。
このためには、プロジェクト プロパティおよび [Micro Focus > Project Settings > Assembler Compiler > Auto-link Settings] タブで [Resolve external calls at link time (CALL)] を無効にします。
NCAL を設定した場合、リンカーは、外部参照が解決されなかったことを示す警告を発行し、外部参照のアドレスを保持する各フィールドにゼロを格納します。
- 呼び出し側モジュールをコード化して、常に動的にリンクできます。リンク先のモジュールに LOAD を発行してから、BALR を発行してそのモジュールにブランチします。この方法では、NCAL リンカー指令を指定してもしなくても構いません。
この環境の各モジュールに再エントリおよび連続再利用可能のマークを付けることもお勧めします。これにより、モジュールが呼び出しのたびに削除されたり再ロードされたりすることはありません。
モジュールに再エントリのマークを付けるには、次の操作を行います。
- プロジェクト プロパティおよび [Micro Focus > Project Settings > Assembler Compiler] タブで [Mark module as reentrant (RENT)] を [true] に設定します。
モジュールに連続再利用可能のマークを付けるには、次の操作を行います。
- プロジェクト プロパティおよび [Micro Focus > Project Settings > Assembler Compiler > Auto-link Settings] タブで [Mark load module as serially reusable (REUS)] を [true] に設定します。
通常は動的にリンクするモジュールで静的リンクを使用する場合や、その END 文がモジュールのデフォルトのエントリ ポイントを指定する場合、ENTRY コマンドをリンカー入力ファイル .LIN で指定して、デフォルトのエントリ ポイントをオーバーライドする必要があります。これは、メインフレームのバインダー ツールをエミュレートするリンカーが、実行可能プログラム全体のエントリ ポイントを、最後にインクルードされたモジュールの END 文で指定されたエントリ ポイントに設定するためです。