Q31557: Passing Array of TYPE or Fixed-Length Strings to SUBprogram
Article: Q31557
Product(s): See article
Version(s): 4.00 4.00b 4.50
Operating System(s): MS-DOS
Keyword(s): ENDUSER | B_BasicCom | mspl13_basic
Last Modified: 15-JAN-1991
An array of fixed-length strings cannot be passed directly as a
parameter to a SUBprogram or FUNCTION procedure (that is, the phrase
AS STRING*n cannot be used in DECLARE, SUB, or FUNCTION statements).
The following are three alternatives for passing an array of
fixed-length strings to a procedure:
1. Pass the array of fixed-length strings through COMMON SHARED.
(Please see Example 1 below.)
2. Convert the array of fixed-length strings to an array of
user-defined type and pass the array AS that type. (Please see
Example 2 below or the TORUS.BAS sample program provided on the
release disk.)
3. Convert the array of fixed-length strings to an array of
user-defined type and pass that array through COMMON SHARED. (Please
see Example 3 below.)
This information applies to QuickBASIC Versions 4.00, 4.00b and 4.50,
to Microsoft BASIC Compiler Versions 6.00 and 6.00b for MS-DOS and
OS/2, and to Microsoft BASIC Professional Development System (PDS)
Versions 7.00 and 7.10 for MS-DOS and MS OS/2.
Note that when you pass a simple fixed-length string variable to a
procedure, it is always converted to a variable-length string. Thus,
the variable-length STRING type is allowed in DECLARE, SUB, and
FUNCTION statements, but the fixed-length STRING*n type is not.
The following is an example (Example 1) of how to pass an array of
fixed-length strings through COMMON SHARED:
DECLARE SUB TEST()
DIM X(1 TO 30) AS STRING*22
COMMON SHARED X() AS STRING*22
X(5)="THIS IS A TEST"
CALL TEST
END
SUB TEST STATIC
PRINT X(5)
END SUB
The following is an example (Example 2) of how to pass an array of
user-defined type as a parameter to a procedure:
DECLARE SUB sub1 (t() AS ANY)
TYPE foo
y AS STRING * 10
END TYPE
DIM t(10) AS foo
CALL sub1(t())
PRINT t(1).y
END
SUB sub1 (t() AS foo)
t(1).y = "test"
END SUB
The following is an example of how to pass an array of user-defined
type through COMMON SHARED:
TYPE FOO
FIRST AS STRING*25
END TYPE
DIM AR(9) AS FOO
COMMON SHARED AR() AS FOO, TEMP AS INTEGER
AR(5).FIRST="This is fifth element"
TEMP=99
CALL TEST
END
SUB TEST STATIC
PRINT AR(5).FIRST
PRINT TEMP
END SUB
THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. MICROSOFT DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES SO THE FOREGOING LIMITATION MAY NOT APPLY.
Copyright Microsoft Corporation 1986-2002.