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

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

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

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

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

...
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-id Service as "Service".

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

2 行目:

set myRunUnit to type RunUnit::new()

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

3 ~ 6 行目:

try
...
catch

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

4 行目:

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

Implicitly creates an instance of theAddTwoNumbers() method and then calls it within the new run unit.パラメーターは、参照によって渡され、呼び出し先のプログラムで使用されているデータ形式と一致するように自動的にマーシャリングされます。

6 行目:

invoke myRunUnit::StopRun(0)   

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

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