ILNATIVE

COBOL 01 レベルのデータ項目をマネージ (.NET または Java) プリミティブとして公開します (可能な場合)。
制約事項: この指令は、JVM COBOL でのみサポートされています。

通例:

  • JVM COBOL データ型と同等の COBOL レベル 01 データ項目は、そのネイティブ型として内部的に処理されます (可能な場合)。詳細については、「COBOL 型の互換性」を参照してください。
  • 他の数値項目は、ILOPTIMIZEDATA 指令の設定およびプログラム内での使用状況に応じて、ネイティブ .NET または Java 型として扱われるか、バイト配列内に格納されます。
  • PROCEDURE DIVISION USING または ENTRY ... USING 文のパラメーターが .NET ネイティブ型に対応する場合、そのパラメーターはエントリ ポイントのメソッド シグネチャでその型のデータ項目として公開されます。
  • JVM COBOL データ型に対応しない BY REFERENCE パラメーターは、データ項目のバイト配列またはオフセットのペアを表す内部型中立オブジェクトとして公開されます。

コンパイラは通常、ターゲット メソッドのシグネチャを調べることによって、呼び出し元のプログラムのパラメーターを適切な型に変換します。このシグネチャを使用できるのは、メソッドが呼び出し元のプログラムと同じソース モジュールにある場合や、ILSOURCE 指令で識別されるモジュールまたは ILREF 指令で識別されるアセンブリにある場合です。

呼び出し先のプログラムがコンパイル時に認識されていないか、実行時まで使用できない場合、呼び出し元のプログラムは CALL 文のデータ項目のみに基づいてパラメーター型を設定します。実行時に、パラメーターの型がターゲット メソッドの型と一致しないことがあり、この場合は .NET CLR または JVM がデータを変換できないため例外が発生します。呼び出し元のプログラムと呼び出し先のプログラムの両方に NOILNATIVE 指令を指定することで、これを回避できます。

構文:

>>-.----.---ILNATIVE----------><
   |    |        
   +-NO-+

パラメーター:

なし

プロパティ:

デフォルト: ILNATIVE
IDE での相当機能: なし。ILNATIVE は、[Project > Properties > COBOL] で追加コンパイラ指令として指定できます。

説明:

.NET または Java プリミティブとして表される COBOL データ項目は、そうでない COBOL データ項目よりもはるかに高パフォーマンスです。ただし、動的呼び出しで呼び出し引数が一致しない場合や、IL ネイティブ型として公開される項目を初期化する DEFAULTBYTE コンパイラ指令にプログラムが依存している場合など、IL ネイティブ型の使用が適切でない場合があります。

これらの問題を回避するには、プログラムをコンパイルする際に NOILNATIVE 指令を指定します。

例:

次のプログラムは、NOILNATIVE を使用してコンパイルする場合を示しています。

cmain.cbl

      01 ws-data pic 9(4) comp-5.
       procedure division.
       call “csub” using ws-data.

csub.cbl

       linkage section.
       01 ls-data.
          03 ls-value pic 9(4) comp-5.

       procedure division using ls-data.
          move 100 to ls-value.
          exit program.

次のようなコマンドを使用して、ILNATIVE のデフォルト設定で 2 つのプログラムを個別にコンパイルします。

cobol cmain jvmgen;
cobol csub jvmgen(sub); 

プログラム cmain を実行すると、ws-data および ls-data データ項目の型が異なるため、実行時に例外が発生します。

ただし、次のように両方のプログラムに NOILNATIVE 指令を指定すると、両方のデータ項目が同じ型で表されるため、引数はサブプログラムに正常に渡されます。

cobol cmain jvmgen noilnative;
cobol csub jvmgen(sub) noilnative;