>>-.---.-.-------ILSMARTLINKAGE---.-------------.--.--------><
+-/-+ | +-"namespace"-+ |
+-----NOILSMARTLINKAGE--------------------+
次の COBOL プログラムは、ILSMARTLINKAGE、ILCUTPREFIX(lnk-b-)、ILCUTPREFIX(lnk-)、および ILSMARTTRIM でコンパイルされます。
program-id. BookLegacy.
...
linkage section.
01 lnk-function pic x.
01 lnk-b-details.
03 lnk-b-text-details.
05 lnk-b-title pic x(50).
05 lnk-b-type pic x(20).
05 lnk-b-author pic x(50).
03 lnk-b-stockno pic x(4).
03 lnk-b-retail pic 99v99.
03 lnk-b-onhand pic 9(5).
03 lnk-b-sold pic 9(5) comp-3.
procedure division using by value lnk-function
by reference lnk-b-details.
C# では、次のように .NET COBOL で BookLegacy プログラムのデータにアクセスできます。
BookLegacy myBook = new BookLegacy();
//creates an object corresponding to the BookLegacy program
Details myDetails = new Details();
//creates an instance corresponding to the group lnk-b-details
. . .
myDetails.Stockno = "6666";
myDetails.Title = "Managed COBOL";
myDetails.Author = "Mike Focus";
myDetails.Type = "Reference";
myDetails.Retail = 15.50M;
myDetails.Onhand = 20;
myDetails.Sold = 5;
myBook.BookLegacy("2", myDetails);
// calls the BookLegacy method with myDetails,
// which corresponds to the group item lnk-b-details
詳細については、Enterprise Developer サンプルの C# WinBook デモンストレーションを参照してください。
説明:
この指令は、グループ リンケージ項目をマネージ コードに公開します。COBOL プログラムで通常生成されるクラスの他に、この指令は実質的に連絡節ですべての 01 レベル グループ項目に 1 つのクラスを生成します。グループの各データ項目がこのクラスのプロパティとして公開され、ここでのプロパティは標準のマネージ タイプです。
COBOL グループ項目は、文字列プロパティとして公開されます。グループに非 DISPLAY データ (数値 COMP 項目など) がある場合、グループに関連付けられたプロパティを非 DISPLAY 項目のポピュレートに使用することはできません。この場合、そのような非 DISPLAY 項目は、非 DISPLAY 項目に関連付けられた個別プロパティを使用してポピュレートする必要があります。ILSMARTRESTRICT 指令を使用すると、グループ項目のプロパティの生成が抑制され、基本項目のプロパティのみが生成されます。
データ項目名からはハイフンが削除され、その削除されたハイフンに続く文字は大文字に変換されます。たとえば、データ項目 author-name は AuthorName に名前変更されます。また、ILCUTPREFIX 指令を使用して名前の最初の部分を削除することもできます。
変換前の元の COBOL 名が重複している場合 (COBOL では修飾を使用して一意にできる場合)、変換後の名前が一意になるように、生成されるプロパティ名に最小限の修飾名がプレフィックスとして付けられます。次に例を示します。
01 link-rec. 03 a1. 05 b pic x. 03 b1. 05 b pic x.この 2 つの基本項目 b に対して生成されるプロパティ名は、a1_b と a2_b になります。
ただし、元の COBOL 名の違いが文字「-」の有無だけの場合や ILCUTPREFIX 指令でプレフィックスが削除されたかどうかだけの場合は、コンパイル時にエラー メッセージ (COBCH0842) が表示されます。このメッセージが表示される場合は、項目名が変換後に一意になるように変更してください。たとえば、次のレコード レイアウトではエラーが発生します。
ネームスペースを指定すると、この指令の結果として生成されるすべてのクラスはそのネームスペースの下でグループ化されます。
ILSMARTLINKAGE を使用してコンパイルすると、追加のメソッドまたは .Reference というプロパティを含むクラスおよび型が生成されます。そのようなクラスまたは型を「参照渡し」で受け取るプログラムにパラメーターとして渡す場合、.Reference プロパティを指定して、「参照渡し」オブジェクトを使用する必要があります。これは、SmartLinkage パラメーターをカプセル化するオブジェクトを返すため、「参照渡し」によって宣言されているメソッドで使用されます。
また、.Reference を RunUnit:Call() メソッドで使用する必要があります。次に例を示します。
myRunUnit.Call("myprogram", myByRefParam.Reference);