2 つのプログラム間でパラメーターを渡す際の規則、およびインターフェイスに関するその他の詳細について説明します。
COBOL プログラムと他の言語で作成されたプログラムは、相互に呼び出すことができます。ただし、COBOL とは異なる方法で呼び出しを処理する言語もあります。例えば一部の言語では、COBOL プログラムが予期する順序とは逆の順序でパラメーターが渡されます。COBOL および非 COBOL プログラム間で相互に呼び出しができるように、COBOL プログラムが使用する、または使用を予期する呼び出しメカニズムを調整できます。
必要な呼び出しメカニズムを指定するには、必要なメカニズムを作成する呼び出し規則番号を最初に構成します。呼び出し規則番号は 16 ビットの数値で、定義は以下のとおりです。
- ビット 0
-
0 |
右から左にパラメーターを処理します |
1 |
左から右にパラメーターを処理します |
注: このビットは、JVM COBOL では無視されます。
- ビット 1
-
0 |
呼び出し元のプログラムが、スタックからパラメーターを削除します |
1 |
呼び出し先のプログラムが、スタックからパラメーターを削除します |
注: このビットは、JVM COBOL では無視されます。
- ビット 2
-
0 |
終了時に戻りコードを更新します |
1 |
終了時に戻りコードを更新しません |
RETURNING 指定は、このビットに影響されません。
- ビット 3
-
0 |
通常のリンク動作を行います |
1 |
呼び出しはリンク時に解決されます |
- ビット 4 およびビット 5
- 予約済み (常に 0)
- ビット 6
-
0 |
呼び出しは Windows 標準呼び出し規則に従いません |
1 |
呼び出しは Windows 標準呼び出し規則に従います |
これは、動的呼び出しには影響しません。注: JVM COBOL では、このビットは Windows でのみサポートされます。
- ビット 7
- 予約済み (常に 0)
- ビット 8
-
0 |
個々のエントリ ポイントのパラメーター数を調べます |
1 |
個々のエントリ ポイントのパラメーター数は調べません |
注: このビットは、JVM COBOL では無視されます。
- ビット 9
-
0 |
プログラムまたは呼び出し名の大文字小文字を区別しません |
1 |
プログラムまたは呼び出し名の大文字小文字を区別します |
この呼び出し規則は、LITLINK 呼び出しを実行する際に、引用符で囲まれたプログラム名または呼び出し名のテキスト処理方法をジェネレーターに指示します。このビットが 0 の場合でも、CASE ジェネレーター指令に応じて、プログラム名または呼び出し名の大文字小文字が区別される場合もあります。注:このビットは、JVM COBOL では無視されます。
- ビット 10
-
0 |
通常の呼び出し動作を行います |
1 |
1 つ目のパラメーターは、常に CALL の RETURNING アイテムになります |
- ビット 11-15
- 予約済み (常に 0)
呼び出し規則番号をすでに構成している場合は、それを 10 進数に変換してから、特殊名段落で定義して、変換された 10 進数を名前に割り当てます。次に、CALL 文で呼び出し規則名を使用します。
たとえば、次の呼び出し規約を定義するとします。
SPECIAL-NAMES.
CALL-CONVENTION 0 IS Microsoft-c
CALL-CONVENTION 3 IS Pascal.
この場合、次のように C プログラムを呼び出す際に、規則を 1 つ使用できます。
CALL Microsoft-c "routine-name" USING parameter-1,parameter-2
また、Pascal プログラムからの呼び出しを受け取る場合は、次のように別の規則を使用します。
PROCEDURE DIVISION Pascal USING parameter-1,parameter-2
呼び出し規則を指定しない場合は、DEFAULTCALLS コンパイラ指令を使用しない限り、標準 COBOL 規則 (呼び出し規則 0) が想定されます。