ILNATIVE

可能な場合に COBOL 01 レベルのデータ項目を .NET ネイティブ型として公開します。

制限事項:この指令は、.NET マネージ コードに対してのみサポートされています。

構文:

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

パラメータ:

なし

プロパティ:

デフォルト: ILNATIVE
IDE での同等項目: なし。[プロジェクトプロパティCOBOL] で追加のコンパイラ指令として ILNATIVE を指定できます。

注釈:

IL ネイティブ型として表されている COBOL データ項目は、それ以外のデータ項目よりもかなり効率よく実行されます。ただし、状況によっては、IL ネイティブ型の使用が適さない場合もあります。たとえば、呼び出し引数が動的呼び出しに適合しない場合などです。

ILNATIVE を指定すると、次のようになります。


  • .NET ネイティブ型と等価の COBOL レベル 01 データ項目は、可能であればそのネイティブ型として内部で処理されます(「COBOL 型の互換性」を参照)。
  • レベル 01 項目以外の COBOL データ項目は、.NET バイト配列内に格納されます。
  • PROCEDURE DIVISION USING 文または ENTRY ... USING 文のパラメータが .NET ネイティブ型に対応する場合、そのパラメータはエントリ ポイントの IL メソッド シグネチャでその型のデータ項目として公開されます。
  • .NET ネイティブ型に対応しない BY REFERENCE パラメータは、データ項目のバイト配列/オフセットの組み合わせを表す内部の型ニュートラルのオブジェクトとして公開されます。

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

呼び出し先プログラムがコンパイル時にわからない場合、または実行時まで使用できない状態にある場合、呼び出し側プログラムでは、CALL 文のデータ項目のみに基づいてパラメータの型が設定されます。実行時には、パラメータの型がターゲット メソッドのパラメータの型と一致しない場合があります。この場合、データを変換できないため、.NET CLR で System.ArgumentException が生成されます。この問題を回避するには、呼び出し側プログラムと呼び出し先プログラムの両方に 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 ilgen;
cobol csub ilgen(sub);

プログラム cmain を実行すると、ws-data データ項目と ls-data データ項目の型が異なるために、実行時に ArgumentException が生成されます。

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

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