ILE C および VisualAge C++ プログラムおよびプロシージャーの呼び出し

注:
このセクションにおいて ILE C を参照している個所は、すべて VisualAge C++ にも適用されます。

ILE COBOL プログラムでは、動的プログラム呼び出しまたは静的プロシージャー呼び出しを使用して、ILE C プログラムおよびプロシージャーを呼び出すことができます。

動的プログラム呼び出しを使用して ILE C プログラムを呼び出す場合、ILE C プログラムは別個のプログラム・オブジェクトとしてコンパイルおよびバインドしなければなりません。 静的プロシージャー呼び出しを使用して ILE C プロシージャーを呼び出す場合、ILE C プロシージャーでは、 まずコンパイルしてモジュール・オブジェクトにして、それから ILE COBOL 呼び出し側プログラムにバインドしなければなりません。 ILE C において、ILE プロシージャーは ILE C 関数に対応しています。 ILE C プログラムおよびプロシージャーのコンパイルとバインディングについては、「WebSphere Development Studio: ILE C/C++ Programmer's Guide」を参照してください。

ILE C プログラムまたはプロシージャーを ILE COBOL プログラムから呼び出すには、CALL リテラル のステートメントを使用します (リテラル は ILE C プログラムまたはプロシージャーの名前)。 ILE C プログラムまたはプロシージャーを呼び出すには、別の ILE COBOL サブプログラムを呼び出す場合と同様に、CALL リテラル のステートメントを入力します。 ILE COBOL プログラムに CALL ステートメントを書いて、動的プログラム呼び出しまたは静的プロシージャー呼び出しを使用して ILE C プログラムを呼び出す方法については 静的プロシージャー呼び出しと動的プログラム呼び出しの使用を参照してください。

CALL id を使用することによって、ILE C プログラムを ILE COBOL プログラムから呼び出すこともできます。 CALL id については CALL id の使用を参照してください。

あるいは、ILE C プログラムまたはプロシージャーを ILE COBOL プログラムから呼び出すのに、CALL プロシージャー・ポインター を使用することもできます。 CALL プロシージャー・ポインター については CALL プロシージャー・ポインターの使用を参照してください。 ILE COBOL のプロシージャー・ポインターは、ILE C の関数ポインターに相当します。 プロシージャー・ポインターは、CALL ステートメント上で ILE COBOL から ILE C 関数へ引き数として渡すことができます。 また ILE C 関数によりパラメーターを関数ポインターとして定義させることができます。

ILE COBOL CALL ステートメントの RETURNING 句が指定されていた場合は、値を戻す ILE C 関数しか呼び出すことができません。

同じ活動化グループにある 2 つ以上の ILE C プログラムが、互いの実行時リソースとやりとりすることができます。 その方法の詳細については、「WebSphere Development Studio: ILE C/C++ Programmer's Guide」を参照してください。 したがって、ILE COBOL から呼び出した ILE C プログラムが、同じ活動化グループで他のプログラムと一緒に作動するように設計されているかどうかを確認する必要があります。 同じ活動化グループにある 2 つの ILE C プログラムは、errno、シグナル・ベクトル、およびストレージ・プールなどを共用することができます。 ILE COBOL プログラムで 2 つ以上の ILE C プログラムを呼び出す必要があり、それらのプログラムが 同じランタイムを共用するように設計されていない場合、ILE C プログラムを実行する活動化グループに別の名前を指定してください。

デフォルトのプログラム・タイプの場合、 ILE C では再帰可能ですが、ILE COBOL では再帰は不可能です。COBOL プログラムを 再帰的プログラムにするには、PROGRAM-ID 段落で RECURSIVE 文節を使用する必要があります。 ILE C 関数が ILE COBOL の非再帰的プログラムを再帰的に呼び出すと、 ILE COBOL プログラムから実行時エラー・メッセージが生成されます。

ILE C 関数を ILE COBOL プログラムから呼び出すとき、呼び出す ILE C 関数名は、大文字小文字の区別が必要であったり、10 文字より長い (最高 256 文字) 必要があったり、 いくつかの特殊文字が入っている必要があったりする場合があります。 この場合、静的プロシージャー呼び出しを使用し、CRTCBLMOD または CRTBNDCBL の各コマンドの OPTION パラメーターに *NOMONOPRC 値を指定して ILE COBOL プログラムをコンパイルしてください。

ILE C++ コンパイラー・プロシージャーが ILE COBOL から呼び出されるとき、ILE C++ コンパイラーの関数名のマングリングを防止するために、ILE C++ コンパイラー用関数プロトタイプにキーワード extern "COBOL" または extern "C" がなければなりません。 ILE COBOL が BY VALUE の引き数を ILE C++ コンパイラーに渡す場合は、extern "C" を使用してください。