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

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

6 行目:

invoke myRunUnit::StopRun(0)   

完了した実行単位を破棄します。

注: C# やその他の .NET 言語でも、上記のプログラムが COBOL を呼び出すのと同じような手順で COBOL を呼び出すことができます。サンプルについては、MicroFocus.COBOL.RuntimeServices アセンブリの RunUnit Class のヘルプを参照してください。