構造化レコードを呼び出し先プログラムに送信し、そこで以下の複数の方法のいずれかで受け取られるように、EGL プロパティーを設定することができます。その複数の方法とは、構造化レコードとして、またはレコードがそのレコード内のリーフ要素に対応する一連の個別フィールドであるかのようにして、またはレコードとフィールドの順次セットとして、というものです。 この使用は特に、EGL コード化ロジックが、Natural プログラミング言語で作成されたコードからマイグレーションされた EGL コード化ロジックと対話する場合に適しています。
この動作は、call ステートメントと呼び出し先プログラムの両方の callingConvention プロパティーの設定に依存しています。 このプロパティー値は、CallingConventionKind.Expanded であるか、または短縮形の Expanded です。
Record MyCompletePart type BasicRecord
10 myInt INT;
10 myInt02 INT;
10 myChars CHAR(5);
end
Record MySubPart type BasicRecord
10 myInt02 INT;
10 myChars CHAR(5);
end
myCompleteRecord MyCompletePart;
mySubRecord MySubPart;
myIntVar INT;
myInt02Var INT;
myCharsVar CHAR(5);
call MyProgram( myCompleteRecord ) { callingConvention=Expanded };
call MyProgram( myIntVar, mySubRecord ) { callingConvention=Expanded };
call MyProgram( myIntVar, myInt02Var, myCharsVar) { callingConvention=Expanded };
Program MyProgram type BasicProgram ( myCompleteRecord MyCompletePart )
{ callingConvention=Expanded }
end
Program MyProgram type BasicProgram ( myIntVar INT, mySubRecord MySubPart )
{ callingConvention=Expanded }
end
Program MyProgram type BasicProgram ( myIntVar INT, myInt02Var INT, myCharsVar CHAR(5))
{ callingConvention=Expanded }
end
3 つの call ステートメント引数リストはいずれも、3 つの呼び出し先プログラム・パラメーター・リストのどれに対しても有効です。
Record X type BasicRecord
10 myChar CHAR(4)[2];
20 mySubChar01 char(2);
20 mySubChar02 char(2);
end
Expanded を使用すると、各リーフ (mySubChar01 または mySubChar02) は、そのリーフ内のフィールドが連続的に保管されていない場合でも、連続的なメモリー・ブロックで渡されます。 データはコピーする必要があり、余分の処理時間がかかります。 多次元構造化フィールド配列の保管方法について詳しくは、『配列』を参照してください。
構造化フィールド配列を明示的に受け渡す場合は、『構造化フィールド配列の受け渡し方法』を参照してください。