ILSMARTLINKAGE コンパイラ指令の使用の例

以下の例は、手続き型プログラムを ILSMARTLINKAGE コンパイラ指令でマネージ コードにコンパイルすることで、マネージ アプリケーションに公開する方法について示しています。これにより、クラスのメンバーになっているより低いレベルのデータ項目とともに各グループ項目のクラスを生成することで、手続き型コードの連絡節項目とエントリ ポイントの、他のマネージ言語への公開が促進されます。

この例では、ラッパー クラスの使用例に含まれていた、計算プログラムの微調整バージョンを使用します。

注: このデモンストレーションで作成するプロジェクトの名前は、ラッパー クラスの使用例に使用しているものと同じです。すでにラッパー クラスの使用例のプロジェクトを作成済みである場合、Eclipse が単一ワークスペースにおいて同じ名前でプロジェクトをサポートしていないため、別のワークスペースに切り替える必要がある場合があります。

マネージ プロジェクトを作成します

まず、手続き型プログラムを保持するプロジェクトを作成します。

  1. Visual Studio では、マネージ COBOL クラス ライブラリ プロジェクトを作成します。[COBOL] > [Managed] カテゴリーで [ファイル] > [新規作成]> [Project] をクリックした後、[Class Library] をクリックします。
  2. calclib などの名前を指定して、[Create directory for solution] のチェックボックスを無効にし、[OK] をクリックします。

    これによって、指定された場所にプロジェクト用の calclib サブフォルダーが作成されます。プロジェクトには、削除できる 1 つの COBOL クラス ファイル Class1.cbl が含まれます。

  3. プロジェクトを右クリックし、[追加] > [新しい項目] をクリックします。
  4. [COBOL Items] で [COBOL program] をクリックし、[Name] フィールドで Calc.cbl を指定し、[OK] をクリックします。

    プロジェクトに新しいプログラムが追加され、そのプログラムをエディターで開きます。

  5. プログラムのコードを以下のものに置き換えます。
           program-id. Calc.
    
           data division.
           working-storage section.
    
           linkage section.
           01 operands.
             03 op-1 pic 9(4) comp-5.
             03 op-2 pic 9(4) comp-5.
    
           01 the-result pic 9(8) comp-5.
    
           01 func-code pic x.
           78 add-op value '+'.
           78 sub-op value '-'.
           78 mult-op value 'x'.
           78 div-op value '/'.
    
           procedure division using by reference func-code operands the-result.
    
               evaluate func-code
                  when add-op
                     add op-1 to op-2 giving the-result
                  when sub-op
                      subtract op-2 from op-1 giving the-result
                  when mult-op
                       multiply op-1 by op-2 giving the-result
                  when div-op
                        divide op-1 by op-2 giving the-result
               end-evaluate.
    
               goback.
    
           end program Calc.
    

    この例のバリアントは、ハイフンでつないだバリアント (op-1 と op-2) を使用して、ILSMARTLINKAGE がそれらをどのように扱うかを示しています。

  6. IDE では、プロジェクト プロパティに移動して、[COBOL] タブをクリックし、[Expose group linkage items to managed code] をチェックします。
  7. [ファイル] > [すべてを保存] をクリックします。
  8. ソース プログラムをコンパイルするため、[ビルド] > [Build Solution] をクリックします。

    ILSMARTLINKAGE でコンパイルすると、プログラムのグループ項目が新しいクラスとして、またグループ項目がそのクラスのプロパティとして公開されます。他のマネージ言語は、ハイフンでつながれたデータ項目を認識しませんが、ILSMARTLINKAGE はそれにも対応します。データ項目の名前からハイフンを削除し、Camel 記法で大文字小文字を変更します。その結果、他のマネージ言語は、operands がクラス Operands として公開されている のとみなし、変数 (op-1op-2) はそのクラスのプロパティ op-1 および op-2 として公開されているものとみなします。同様に、func-code は FuncCode として公開されます。

COBOL にマネージ フロントエンド アプリケーションを書き込みます

次に、クラスとそのプロパティとして公開されている手続き型コードのグループ項目エントリにアクセスする、マネージ COBOL プログラムを作成します。

  1. ソリューションでは、新しいマネージ COBOL コンソール アプリケーション プロジェクトを作成します。ソリューション エクスプローラーでソリューションを右クリックし、[Add] > [New Project] をクリックします。
  2. [Managed] > [COBOL] で、[Console Application] をクリックして、OOCalc などの名前を指定し、[OK] をクリックします。
  3. このプロジェクトへのプロジェクト参照を、元の calclib プロジェクトに追加します。OOCalc を右クリックし、[Add Reference] をクリックします。
  4. [Add Reference] ダイアログ ボックスで [Projects] タブをクリックして、Calc プロジェクトが選択されていることを確認し、[OK] をクリックします。[Add Reference] ダイアロ ボックスで [solution] を展開して、[Projects] をクリックし、Calc プロジェクトの前のチェックボックスを有効にし、[OK] をクリックします。

    これによって OOCalc プロジェクトが、calclib プロジェクトからビルド出力ファイルにアクセスできるようになります。

  5. プロジェクトで新しいマネージ クラス Class1 を作成し、手続き型コードのグループ項目にアクセスする次のコードを追加します。
           class-id OOCalc.Class1.
    
           working-storage section.
           78 add-op value '+'.
           78 sub-op value '-'.
           78 mult-op value 'x'.
           78 div-op value '/'.
    
           method-id. main static.
           procedure division.
              declare calculation as type Class1
              set calculation to new Class1
              invoke calculation::Add()
           end method.
    
    
           method-id Add public.
    
           local-storage section.
           01 operand type Operands.
           01 CalcOO type Calc.
           01 func-code type FuncCode.
           01 result pic x(4) comp-5.
    
           procedure division.
    
    
           set func-code to new FuncCode()
           set operand to new Operands()
    
           set operand::Op1 to 1.
           set operand::Op2 to 2.
    
           set CalcOO to new Calc()
           set func-code::FuncCode to add-op
    
    
           invoke CalcOO::Calc(func-code, operand, result)
           display "The result is " result
    
    
    
               goback.
           end method.
    
           end class.

    Class1 で、プログラムのメイン エントリ ポイントになっている静的メソッド main を定義します。main は、型 Class1 のオブジェクト calculation を定義し、Class1 の Add メソッドを実行します。

    このコードは、変数として、型 Operands の operand (クラスとして公開されている手続き型プログラムからのグループ項目)、型 Calc の CalcOO (クラスとみなされている手続き型プログラム)、型 FuncCode の func-code (手続き型プログラムの func-code がどのように公開されるか) を使用するメソッド Add を定義します。

    そして、func-codeoperand、および CalcOO のインスタンスを作成して、手続き型プログラムで op-1op-2 に値を与え、add-op 操作を呼び出すことを指定し、算術計算 invoke CalcOO::Calc(func-code, operand, result) を行うパラメーターとして func-codeoperandresult を使用して手続き型コードを呼び出します。

マネージ プロジェクトを作成します

まず、手続き型プログラムを保持するプロジェクトを作成します。

  1. Eclipse で、COBOL JVM プロジェクトを作成します。[ファイル] > [新規作成] > [COBOL JVM Project] をクリックします。
  2. calclib などの名前を指定し、[Finish] をクリックします。

    これによって、指定された場所にプロジェクト用の calclib サブフォルダーが作成されます。次に、手続き型コードを保持するプログラムを作成する必要があります。

  3. プロジェクトを右クリックし、[New] > [COBOL Program] をクリックします。
  4. [New COBOL Program] ダイアログで、Calc.cbl などの名前を指定し、[Finish] をクリックします。

    これによって、デフォルト パッケージでプロジェクトの src サブフォルダーにプログラムを作成し、エディターでプログラムを開きます。

  5. プログラムのコードを以下のものに置き換え、ファイルを保存します。
           program-id. Calc.
    
           data division.
           working-storage section.
    
           linkage section.
           01 operands.
             03 op-1 pic 9(4) comp-5.
             03 op-2 pic 9(4) comp-5.
    
           01 the-result pic 9(8) comp-5.
    
           01 func-code pic x.
           78 add-op value '+'.
           78 sub-op value '-'.
           78 mult-op value 'x'.
           78 div-op value '/'.
    
           procedure division using by reference func-code operands the-result.
    
               evaluate func-code
                  when add-op
                     add op-1 to op-2 giving the-result
                  when sub-op
                      subtract op-2 from op-1 giving the-result
                  when mult-op
                       multiply op-1 by op-2 giving the-result
                  when div-op
                        divide op-1 by op-2 giving the-result
               end-evaluate.
    
               goback.
    
           end program Calc.
    

    自動ビルドが完了すると、必ずエラーがない状態になります。

    この例のバリアントは、ハイフンでつないだバリアント (op-1 と op-2) を使用して、ILSMARTLINKAGE がそれらをどのように扱うかを示しています。

  6. IDE で、プロジェクト プロパティに移動して、[Micro Focus] を展開し、[Build Configurations] をクリックします。
  7. [Additional directives] フィールドに ILSMARTLINKAGE を入力します。
  8. [Apply] をクリックした後、[OK] をクリックします。

    ILSMARTLINKAGE でコンパイルすると、プログラムのグループ項目が新しいクラスとして、またグループ項目がそのクラスのプロパティとして公開されます。他のマネージ言語は、ハイフンでつながれたデータ項目を認識しませんが、ILSMARTLINKAGE はそれにも対応します。データ項目の名前からハイフンを削除し、Camel 記法で大文字小文字を変更します。その結果、他のマネージ言語は、operands がクラス Operands として公開されているものとみなし 変数 (op-1op-2) はそのクラスのプロパティ op-1 および op-2 として公開されているものとみなします。同様に、func-code は FuncCode として公開されます。

フロントエンド アプリケーションを書き込みます

次に、クラスとそのプロパティとして公開されている calclib プロジェクトの手続き型コードのグループ項目エントリにアクセスする、マネージ COBOL にアプリケーションを作成します。

  1. 新しい COBOL JVM プロジェクトを作成します。[ファイル] > [新規作成] > [COBOL JVM Project] をクリックします。
  2. OOCalc などの名前を指定し、[Finish] をクリックします。
  3. プロジェクトに新しいマネージ クラス Class1 を作成します。プロジェクトを右クリックし、[New] > [COBOL JVM Class] をクリックします。
  4. [終了] をクリックします。

    これによりプロジェクトに Class1.cbl が作成され、エディターでそのファイルが開かれます。

  5. 手続き型コードを使用し、グループ項目にアクセスする次のコードでクラスのコードを置き換えます。
           class-id OOCalc.Class1.
    
           working-storage section.
           78 add-op value '+'.
           78 sub-op value '-'.
           78 mult-op value 'x'.
           78 div-op value '/'.
    
           method-id. main static.
           procedure division.
              declare calculation as type Class1
              set calculation to new Class1
              invoke calculation::Add()
           end method.
    
    
           method-id Add public.
    
           local-storage section.
           01 operand type Operands.
           01 CalcOO type Calc.
           01 func-code type FuncCode.
           01 result pic x(4) comp-5.
    
           procedure division.
    
    
           set func-code to new FuncCode()
           set operand to new Operands()
    
           set operand::Op1 to 1.
           set operand::Op2 to 2.
    
           set CalcOO to new Calc()
           set func-code::FuncCode to add-op
    
    
           invoke CalcOO::Calc(func-code, operand, result)
           display "The result is " result
    
    
    
               goback.
           end method.
    
           end class.

    自動ビルドは、型 CalcFuncCode、および Operands を認識しないため、コードのコンパイルに失敗します。これを解決するには、OOCalc のJVM Build Path に calclib プロジェクトを追加する必要があります。

  6. OOCalc を右クリックして、[Properties] をクリックします。
  7. [Micro Focus] を展開し、[JVM Build Path] をクリックします。
  8. [Projects] タブをクリックし、[Add] をクリックします。
  9. calclib の前のチェックボックスを有効にし、[OK] をクリックします。

    calclibOOCalc の JVM ビルド パスにあるため、OOCalc のコードは calclib で定義されたクラスを検出し、以降のビルドが成功します。

    Class1 で、プログラムのメイン エントリ ポイントになっている静的メソッド main を定義します。main は、型 calculation のオブジェクト Class1 を定義し、Add の Class1 メソッドを実行します。

    このコードは、変数として、型 Operands の operand (クラスとして公開されている手続き型プログラムからのグループ項目)、型 Calc の CalcOO (クラスとみなされている手続き型プログラム)、型 FuncCode の func-code (手続き型プログラムの func-code がどのように公開されるか) を使用するメソッド Add を定義します。

    そして、func-codeoperand、および CalcOO のインスタンスを作成して、手続き型プログラムで op-1op-2 に値を与え、add-op 操作を呼び出すことを指定し、算術計算 invoke CalcOO::Calc(func-code, operand, result) を行うパラメーターとして func-codeoperandresult を使用して手続き型コードを呼び出します。