JVM COBOL からのネイティブ COBOL の呼び出し

JVM COBOL では、CALL 文を使用してネイティブ コードと相互運用します。次に例を示します。

 call xxx using by yyy p by zzz q returning r

詳細は次のとおりです。

xxx
記憶域またはリンケージ項目またはリテラルです。CALL 文で呼び出すエントリ ポイントが保持されます。
p および q

using キーワードと returning キーワード間の項目です。これらはパラメーターです。ゼロ個以上のパラメーターが使用可能です。

yyy および zzz
パラメーター渡しモード (by content、by reference、または by value) を指定します。デフォルトは by reference です。
RETURNING 句
オプションです。

共有ライブラリのネイティブ エントリ ポイント (Windows 上の .dll ファイルまたは UNIX 上の .so ファイル) を呼び出すには、共有ライブラリをロードする必要があります。これにより、JVM ランタイム システムで共有ライブラリが確実に認識されます。ライブラリをロードしてから、ネイティブ エントリ ポイントの呼び出しを行ってください。

たとえば、JVM (JVMGEN) としてコンパイルされた、次のようなプログラム A があるとします。
       01 my-dll       procedure-pointer.

       set my-dll to entry "b"
       call "c"
また、COBOL プログラム B および C を含むネイティブ DLL があるとします。あるとします。
       program-id. b.
       display "IN B"notep

       program-id. c.

        display "INFO: in C"
        display "PASS"

これは、ネイティブ DLL (Windows では b.dll) または CSO (UNIX では b.so) をロードし、含まれるプログラムを見えるようにすることで、プログラム C への CALL が成功するようにします。

JVM ランタイム システムは、要求されたエントリ ポイントを、Callable 属性を持つ JVM メソッドに解決しようとします。特定の名前のエントリ ポイントが JVM で見つからない場合、JVM ランタイム システムは、エントリ ポイントをネイティブ エントリ ポイントに解決しようとします。ネイティブ エントリ ポイントが見つかった場合、エントリ ポイントが呼び出され、その名前はそれ以降のネイティブ エントリ ポイントと関連付けられるため、全検索が再度行われることはありません。

注:
  • JVM エントリ ポイントと同じ名前のネイティブ エントリ ポイントを呼び出すことはできません。
  • エントリ ポイントの名前が同じ 2 つのネイティブ ライブラリを、ロードすることはできません。