混合言語間インターフェイスの呼び出し規則

2 つのプログラム間での、パラメーターを渡す際の規則およびインターフェイスに関するその他の詳細について説明します。

これらの呼び出し規則は、非マネージ コードのみを呼び出す場合に Platform Invoke を使用する際の、.NET COBOL コードに適用されます。

COBOL プログラムおよび他の言語で作成したプログラムは、相互に呼び出せます。ただし、COBOL とは異なる方法で呼び出しを処理する言語もあります。たとえば一部の言語では、COBOL プログラムが予期する順序とは逆の順序でパラメーターが渡されます。COBOL と非 COBOL プログラムが相互に呼び出せるように、COBOL プログラムが使用する、または使用を予期する呼び出しメカニズムを調整できます。

必要な呼び出しメカニズムを指定するには、必要なメカニズムを作成する呼び出し規則番号を最初に構成します。呼び出し規則番号は 16 ビットの数値で、定義は以下のとおりです。

ビット 0
0 右から左にパラメーターを処理します
1 左から右にパラメーターを処理します
ビット 1
0 呼び出し元のプログラムが、スタックからパラメーターを削除します
1 呼び出し先のプログラムが、スタックからパラメーターを削除します
ビット 2
0 終了時に戻りコードを更新します
1 終了時に戻りコードを更新しません
RETURNING 指定は、このビットの影響を受けません。
ビット 3
0 通常のリンク動作を行います
1 呼び出しはリンク時に解決されます
ビット 4 およびビット 5
予約済み (常に 0)
ビット 6
0 呼び出しは Windows 標準呼び出し規則に準拠しません
1 呼び出しは Windows 標準呼び出し規則に準拠します
これは、動的呼び出しには影響しません。
ビット 7
予約済み (常に 0)
ビット 8
0 個々のエントリ ポイントのパラメーター数を調べます
1 個々のエントリ ポイントのパラメーター数は調べません
ビット 9
0 プログラムまたは呼び出し名の大文字と小文字を区別しません
1 プログラムまたは呼び出し名の大文字と小文字を区別します
この呼び出し規則は、LITLINK 呼び出しを実行する際に、引用符で囲まれたプログラム名または呼び出し名のテキスト処理方法をジェネレーターに指示します。このビットが 0 の場合でも、CASE ジェネレーター指令に応じて、プログラム名または呼び出し名の大文字と小文字が区別される場合もあります。
ビット 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) が想定されます。