The QMCallx() function calls a catalogued subroutine on the server. It is analogous to the QMBasic CALL statement. This function is only present in the C and VB.Net versions of the QMClient API. For other versions, use QMCall().
The subroutine may take up to 20 arguments that must be passed as strings. QMClient does not provide a method to call subroutines with a greater number of arguments or those that are defined to pass a QMBasic dimensioned matrix as an argument.
The return value from QMCallx() is zero if successful or non-zero in the case of an error. The actual return value is one of the SV_xxx codes as defined in the qmclilib.h include record.
Unlike QMCall(), the updated values of any arguments modified by the subroutine do not overwrite the original argument variables. Instead, they can be retrieved using the QMGetArg() function, removing the need to know the size of the returned data prior to the call.
The called subroutine may make use of any of the standard QMBasic programming statements and functions, however, it may not perform terminal input that is not handled via the data queue as there is no terminal associated with the server process. Any terminal output will be discarded unless redirected to a COMO file.
The QMCLIENT configuration parameter can be used to restrict QMCallx() to calling only subroutines that have been compiled with the $QMCALL compiler directive. Use of this feature prevents a malicious application that uses the QMClient API calling other subroutines that might not perform adequate security validation to protect the system.
The example below calls a subroutine on the server that sets the credit limit for a specific client. The subroutine takes three arguments, the third of which is used to return an error message if the action fails. Note how the ErrMsg variable is set to a null string before calling the subroutine so that any old content of this variable is not unnecessarily sent across the network to the server. To optimise network traffic, the server only returns arguments values if they have been modified by the called subroutine.