^VARARGARRAY
Access and pass VARARGS undeclared arguments
|
|
|
NSupported in Synergy .NET
|
array = ^VARARGARRAY
or
^VARARGARRAY(array)
Arguments
array
A dynamic array of VariantDesc. VariantDesc is the base type in the Synergy .NET runtime for traditional Synergy data types. A variable defined as VariantDesc can be assigned to/from any descriptor type. See Understanding .NET data types for a list of descriptor types.
Discussion
In traditional Synergy, the Synergy routine call block API can be used to dynamically generate routine calls at runtime, rather than at compile time. In Synergy .NET, the ^VARARGARRAY data reference operation, together with the VARARGS routine modifier and the XSUBR routine, can be used to achieve similar functionality.
The VARARGS routine modifier enables you to pass more than the declared number of arguments, which means that the number of arguments passed can change based on changing conditions in your program.
The ^VARARGARRAY data reference operation enables you to access the hidden trailing optional arguments in a VARARGS routine. For example,
subroutine myroutine, varargs My1stArg ,n record MyVarArgs ,[#]@VariantDesc NewVarArgs ,[#]@VariantDesc
The local array (myVarArgs) could then be manipulated using the methods defined for the System.Array class in .NET, or more likely, you would add, modify, or remove elements as you copied them to a new array (newVarArgs). This array could then be passed to another routine, thereby dynamically defining the parameters. For example,
xcall yourRoutine(arg1, arg2, ^varargarray(NewVarArgs))
or
xcall xsubr(“yourRoutine”, arg1, arg2, ^varargarray(NewVarArgs))
You can also use ^VARARGARRAY to pass on the hidden trailing optional arguments to another VARARGS routine’s hidden parameter array. For example,
xcall hisRoutine(arg1, ^varargarray)
If you are dynamically constructing calls to system-supplied routines in .NET, ^VARARGARRAY can only be specified in place of documented repeating arguments (e.g., argument[,…] or [argument,…]) that occur after the last declared argument. The table below contains a list of the Synergy routines that accept a ^VARARGARRAY argument and the number of declared arguments in each routine:
Routine |
Number of arguments |
---|---|
xcall ISAMC(file_spec, rec_size, num_keys, key_spec[, ...]) |
4 |
xcall S_BLD(destination, length, control[, argument, ...]) |
3 |
value = %SSC_BIND(dbchannel, dbcursor, numvars, var[, ...]) |
3 |
value = %SSC_CLOSE(dbchannel, dbcursor[, ...]) |
2 |
value = %SSC_DEFINE(dbchannel, dbcursor, numvars, var[, ...]) |
3 |
value = %SSC_EXECIO(dbchannel, dbcursor, [ncount], [numvars][, type, var, arg] |
4 |
value = %SSC_OPEN(dbchannel, dbcursor, statement, type, [options], [numvars] |
6 |
value = %SSC_SCLOSE(dbchannel, dbcursor[, ...]) |
2 |
value = %SSC_SQLLINK(dbchannel, dbcursor, statement[, numvars][, var, ...]) |
4 |
xcall W_AREA(id, function[, ...]) |
1 |
xcall W_BRDR(id, function[, ...]) |
2 |
xcall W_DISP(id, function[, ...]) |
2 |
xcall W_FLDS(id, function[, ...]) |
2 |
xcall W_INFO(function[, ...]) |
1 |
xcall W_PROC(function[, ...]) |
1 |
return = %WPR_EXECUTE(report_handle, operation[, arguments]) |
2 |
return = %WPR_INFO(report_handle, operation[, arguments]) |
2 |
return = %WPR_PRINT(report_handle, operation[, arguments]) |
2 |
xcall XSUBR(subroutine[, arguments, …]) or value = %XSUBR(valfunction[, arguments, ...]) |
1 |
xcall XSUBR(nonvalfunction, return[, arguments, ...]) |
2 |