MultiRunUnits デモンストレーションの説明

MultipleRunUnits デモンストレーションでは、手続き型 COBOL プログラムのインスタンスが専用の実行単位内で実行される様子を示してます。

このデモンストレーションの Web サイトには、sum というプログラム ID を持つ手続き型 COBOL プログラム Sum.cbl が含まれています。このプログラムをコンパイルすると、インスタンス化が可能なクラスとして表現されます。このプログラムを使用すると、プログラムのインスタンスが作成されて、実行単位が 1 つ作成されます。次に、このプログラムインスタンスは、この新しい実行単位内で実行されます。

この Web サイトには次の参照が含まれています。これらの参照は、ソリューション ビューで確認できます。

この Web サイトには、COBOL で作成された呼び出し側プログラム service.cbl があります。このプログラムには、次のような特徴的な行がいくつかあります。

        ...
1       class COBOL-RunUnit as "MicroFocus.COBOL.RuntimeServices.RunUnit"
        ...
2       invoke COBOL-RunUnit::"New" returning MyRunUnit
3       try
4          invoke MyRunUnit::"Call"("AddNumbers", op1, op2) returning res
           ...
5       end-try
        ...
6       invoke MyRunUnit::"StopRun"(0)
...
1       class-id Service as "Service".
        ...
2      set myRunUnit to type RunUnit::new()
3              try
4                 invoke myRunUnit::Call("sum", op1, op2) returning res
               ...
5              invoke myRunUnit::StopRun(0)
               ...
6              end-try
                         ...

1 行目:

    class COBOL-RunUnit as "MicroFocus.COBOL.RuntimeServices.RunUnit"
       class-id Service as "Service".

2 行目で使用されるクラスを定義します。MicroFocus.COBOL.RuntimeServices はプロジェクト参照に含まれる点に注意してください。

2 行目:

invoke COBOL-RunUnit::"New" returning MyRunUnit
set myRunUnit to type RunUnit::new()

MicroFocus.COBOL.RuntimeServices アセンブリのサポート機能を使用して、実行単位を 1 つ作成します。

3 ? 5 行目:

3 ? 6 行目:

try
...
catch

呼び出されたプログラムが失敗した場合でも、実行単位が破棄されるようにします。

4 行目:

invoke MyRunUnit::"Call"("AddNumbers",op1, op2) returning res
invoke myRunUnit::Call("sum",op1, op2) returning res

暗黙的に AddNumbers()AddTwoNumbers() メソッドのインスタンスを作成して、新しい実行単位内でそのインスタンスを呼び出します。パラメーターは、参照によって渡され、呼び出されたプログラムで使用されているデータ形式と一致するように自動的にマーシャリングされます。

6 行目:

invoke MyRunUnit::"StopRun"(0)
invoke myRunUnit::StopRun(0)   

ここで、使用済みの実行単位を破棄します。

注: C# やその他の .NET 言語でも、上記のプログラムが COBOL を呼び出すのと同じような手順で COBOL を呼び出すことができます。MicroFocus.COBOL.RuntimeServices アセンブリに関する次のヘルプで、例をいくつか確認できます。「RunUnit Class」。