KnowledgeBase Archive

An Archive of Early Microsoft KnowledgeBase Articles

View on GitHub

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.