The action is meaningful only when you use a procedure with IN OUT parameters
(a structure type) in context of object Event.
It is unimportant for RPC procedures.
When
CALL action is executed, the action PRAGMA "ENABLE_INOUT_BY_REF"
ensures the real parameter, which inputs to the procedure via its
formal parameter, will not be copied to the formal parameter of procedure.
It means the formal parameter represents a reference to the real parameter.
Basically, CALL action
creates a copy of the real parameter and uses it as the formal
parameter. It causes:
A procedure call copies the procedure values uselessly (it is slower).
The formal parameter is "separated" from the real parameter.
PRAGMA "ENABLE_INOUT_BY_REF" ensures the formal parameter is "a
reference" to the real parameter and the value is not copied. The
procedure call is faster.
Example
PROCEDURE Proc1(RECORD (SD.Data) _data)
.
.
_data[1]^Col :=2
.
.
.
.
END Proc1
BEGIN
PRAGMA "ENABLE_INOUT_BY_REF"
RECORD (SD.Data) _rec
REDIM _rec [2]
_rec[1]^Col :=0
CALL Proc1(_rec)
END
An application of PRAGMA "ENABLE_INOUT_BY_REF"
action:
The formal parameter _data is the real parameter _rec.
When you write _data[1]^Col := 2, the value "2" is assigned to the
real parameter
_rec[1]^Col.
An application of CALL action (PRAGMA "ENABLE_INOUT_BY_REF"
action is not used):
The formal parameter _data is an absolute copy of the real parameter _rec.
When you write _data[1]^Col := 2, the value "2" is assigned to the formal parameter
_data.
After CALL proc1(_rec) is executed, the formal parameter _data
will be copied to the real parameter
_rec.
0 komentárov