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.