The BYVAL statement is used to pass a numerical parameter's value with procedures made in other programming languages.
- SUB ProcedureName (BYVAL variable1, BYVAL variable2)
- QB64 can only use BYVAL in DECLARE LIBRARY procedures that add DLL or Operating System API functions.
- Supported with DECLARE LIBRARY SUB and FUNCTION procedure declarations when passing numerical values only.
- Passing numerical values BYVAL assures that the original numerical variable value is not changed by another procedure.
- Use parenthesis around program SUB or FUNCTION parameters passed by value. Ex: CALL Procedure ((x&), (y&))
- Do not use BYVAL before STRING or TYPE variables or in regular prograam SUB or FUNCTION parameters.
- NOTE: Many QBasic keywords can be used as variable names if they are created as STRINGs using the suffix $. You cannot use them without the suffix, use a numerical suffix or use DIM, REDIM, _DEFINE, BYVAL or TYPE variable AS statements.
- QBasic versions below 7 do not use BYVAL unless the SUB program referred to is from a different programming language.
- PDS versions can use BYVAL as it is intended in any SUB or FUNCTION parameters.
- BYVAL could also be used with ABSOLUTE in QBasic.
Example 1: BYVAL is used to preserve the values sent to an external procedure so they remain the same after they are used:
- Note: The DLL call above uses the SDL library, which was included with QB64 up to version 0.954. Won't work with version 1.000 and up.
CALL MySUB (a%, (b%), (c%)) 'CALL SUB b and c stay 0 after sub MySUB a%, b%, (c%) 'call SUB again without CALL only c stays 0 after sub PRINT "After procedures: "; a%, b%, c% SUB MySUB (a%, b%, c%) a% = a% + 1: b% = b% + 1: c% = c% + 1 PRINT "Inside procedure: "; a%, b%, c% END SUB
Inside procedure: 1 1 1 Inside procedure: 2 1 1 After procedures: 2 1 0
- Explanation: Both SUB calls pass just the values of b% and c% to the procedure. The first variable, a%, is passed by reference (the default) so the value was changed by the SUB procedure. Brackets can only be used in the CALL or function reference.
- DECLARE LIBRARY
- SUB, FUNCTION
- CALL, ALIAS
- DECLARE, DECLARE (non-BASIC statement) (not used by QB64)
- C++ Variable Types