RPG

82. フィールドのポインターを取得する %ADDR

%ADDR はILEの発表とともに追加された V3R2M0から使えるBIFFコードである。

%ADDR はフィールドのポインター値を戻す。

RPGの開発者にとってポインターを示す %ADDR など、なぜ必要なのかと思われるかもしれない。

RPGでポインタの必要性があるのかと疑問になるかもしれない。

最初に「ILEの発表とともに」と説明したのには理由がある。

ANSI-C 言語で *SRVPGM を開発してRPGからそれを利用するケースを考えて欲しい。

また汎用性のある高度なAPI を使用する場合も同じである。

長さの不明なパラメータ値を取得する場合にはC言語では、変数値そのものではなく

変数のポインターと長さをパラメータとして受け取る場合が多い。

ポインターとはフィールドの開始位置(番地)を示すものであるがポインターを受け取ることに

よって任意の長さの変数に対応することができるからである。

Java はポインターの機能がないので、このようなことはできないが。

またパラメータを戻り値として使用する場合はポインターの使用は必須である。

このことはこのサイトのC/400の項を参照されたい。

API のマニュアルを参照してポインター( * ) を要求しているようであれば%ADDR を使って

ポインターを渡すことが必要となる。

RPG からC/400のAPI を使用したい場合は %ADDR を使うケースが多くなるはずである。

最近のOS400 API の多くはこのような傾向にある。

【例】STACK という配列の LV番目をプロシージャー RESUME に渡す

     CALLP RESUME(%ADDR(STACK(LV)))