%RCB_CALL
Call a routine using a routine call block
|
WSupported on Windows
|
USupported on Unix
|
VSupported on OpenVMS
|
|
result = %RCB_CALL(rcbid)
or
xcall RCB_CALL(rcbid)
Return value
result
The ^VAL result of the Synergy function. This is meaningful only if the routine being called is a ^VAL function. If the routine being called is a subroutine or a non-^VAL function, result is set to 1. If the routine being called is a non-^VAL function, the FRETURN value is returned as the first argument of the routine call block argument list.
Arguments
rcbid
The identifier for the routine call block. This is the return value from %RCB_CREATE. (n)
Discussion
%RCB_CALL is used to call a routine once the routine call block is built.
If the function to be called is specified through %RX_SETRMTFNC, a remote call is executed. If the function to be called is specified through %RCB_SETFNC, a local call is executed. When %RCB_CALL is used to call a remote routine, all arguments specified as ^VAL are passed as an integer, and all arguments specified as ^REF have the data passed according to the type and length specified in the %RCB_SETARG call. If an argument has not been specified, it is passed as a null argument.
See also
subroutine ABC
arg1, n
arg2, n
proc
arg1 = arg1 + arg2
xreturn
endsubroutinefunction DEF
arg1, n
arg2, n
proc
freturn(arg1 + arg2)
endfunctionfunction GHI, ^VAL
arg1, n
arg2, n
proc
freturn(arg1 + arg2)
endfunction
subroutine JKL
rcbid, i4
a, i4
b, i4
result, i4
value, i4
proc
a = 3
b = 4
rcbid = %rcb_create(2)
xcall rcb_setfnc(rcbid, "ABC")
xcall rcb_setargs(rcbid, 1, a, b)
result = %rcb_call(rcbid) ;result = 1, a = 7, b = 4
xcall rcb_delete(rcbid)
a = 3
b = 4
rcbid = %rcb_create(3)
xcall rcb_setfnc(rcbid, "DEF")
xcall rcb_setargs(rcbid, 1, result, a, b)
value = %rcb_call(rcbid) ;value = 1, result = 7, a = 3, b = 4
xcall rcb_delete(rcbid)
a = 3
b = 4
rcbid = %rcb_create(2)
xcall rcb_setfnc(rcbid, "GHI")
xcall rcb_setargs(rcbid, 1, a, b)
result = %rcb_call(rcbid) ;result = 7, a = 3, b = 4
xcall rcb_delete(rcbid)
xreturn
endsubroutine
