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"
       end program b.

       program-id. c.
        display "INFO: in C"
        display "PASS"
       end program c.

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

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

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