Variable Sharing in QB45

 BBS: Inland Empire Archive
Date: 11-22-92 (00:30)             Number: 380
From: PETE DUDESEK                 Refer#: NONE
  To: MICHAEL BAILEY                Recvd: NO  
Subj: Variable Sharing in QB45       Conf: (2) Quik_Bas
 > combnations of COMMON SHARED, DIM SHARED, and SHARED statements with
 > each of the modules and subs, and the variables still aren't being
 > shared back up to the module level and across to other modules.

 > Anyone know what I'm doing wrong, or am I trying to handle this

I had the same problem recently and here is how I do it now.

This is a simple little test program for you to use to see how
to pass variables in modules. Just cut each one out and save
them as a seperate files. COMMON.INC, DECLARE.INC, MAIN.BAS,
SUB1.BAS, SUB2.BAS, and SUB3.BAS.

Now load up QB and load in MAIN.BAS. Then with File/Load command
Load in SUB1.BAS, SUB2.BAS and SUB3.BAS.

Now run the program to see it work at passing to and from.

' ----- save this as COMMON.INC --------
' These are all the common shared variables to be used
' by MAIN.BAS, SUB1.BAS, SUB2.BAS, SUB3.BAS

   COMMON SHARED Global1$, Global2$, Global3$
   COMMON SHARED Global1%, Global2%, Global3%
   COMMON SHARED Global4$()

   DIM SHARED Global4$(10)

   Global1$ = "This is the Global1$"
   Global2$ = "This is the Global2$"
   Global3$ = "This is the Global3$"

   Global1% = 1
   Global2% = 2
   Global3% = 3

   FOR Z% = 1 TO 10

      Global4$(Z%) = "This is array Global4$ " + STR$(Z%)

   NEXT Z%
'----- End of COMMON.INC -----

'----- Save this as DECLARE.INC -----
' This is the common declare file to be used with
' MAIN.BAS, SUB1.BAS, SUB2.BAS, SUB3.BAS
DECLARE SUB Sub1Sub ()
DECLARE SUB Sub2Sub ()
DECLARE FUNCTION Sub3Function% (Tmp$)
DECLARE FUNCTION Sub3Function4$ (Tmp AS INTEGER)
'----- End of DECLARE.INC -----

'----- Save as MAIN.BAS -----
' This is a simple test program
' This is the main module called MAIN.BAS
' $INCLUDE: 'DECLARE.INC'
' $INCLUDE: 'COMMON.INC'

CLS

PRINT
PRINT "We are in the main Module"
PRINT

Sub1Sub

Sub2Sub

PRINT Sub3Function(Test$)
PRINT Test$
PRINT

PRINT "Press a key to see the Global4$() array passing test"
DO: LOOP WHILE INKEY$ = ""

FOR X% = 1 TO 10
PRINT Sub3Function4$(X%)
NEXT X%
END
'----- End of MAIN.BAS -----

'----- Save as SUB1.BAS -----
DECLARE SUB Sub1Sub ()
' This is SUB1.BAS
' $INCLUDE: 'DECLARE.INC'
' $INCLUDE: 'COMMON.INC'

SUB Sub1Sub
PRINT "Coming to you from SUB1.BAS - SUB Sub1Sub"
PRINT Global1$
PRINT
END SUB

'----- End of SUB1.BAS -----

'----- Save as SUB2.BAS -----
' This is SUB2.BAS
' $INCLUDE: 'DECLARE.INC'
' $INCLUDE: 'COMMON.INC'

Sub2Sub

SUB Sub2Sub
PRINT "Coming to you from SUB2.BAS - SUB Sub2Sub"
PRINT Global2$, Global2%
PRINT
END SUB

'----- End of SUB2.BAS -----

'----- Save as SUB3.BAS -----
' This is SUB3.BAS
' $INCLUDE: 'DECLARE.INC'
' $INCLUDE: 'COMMON.INC'

FUNCTION Sub3Function% (Tmp$)
PRINT "Coming to you from SUB1.BAS - FUNCTION Sub3Functiuon%"
Sub3Function% = Global3%
Tmp$ = Global3$
END FUNCTION

FUNCTION Sub3Function4$ (Tmp%)
Sub3Function4$ = Global4$(Tmp%)
END FUNCTION

'----- End of SUB3.BAS -----

Note: That if you create a new FUNCTION in one of the sub modules
remember to create a declare statement for it and put it in the
DECLARE.INC. Same goes for SUB's, even though QB automatically
adds a DECLARE SUB to your MAIN Module.

Hope it helps you out.


--- Squish v1.01
 # Origin: UBU-Midwest - Bensenville IL - 708-766-1089  (8:7401/13)
 * Origin: FamilyNet Intl. Echogate [708] 887-7685 (1:115/887)
Outer Court
Echo Basic Postings

Books at Amazon:

Back to BASIC: The History, Corruption, and Future of the Language

Hackers: Heroes of the Computer Revolution (including Tiny BASIC)

Go to: The Story of the Math Majors, Bridge Players, Engineers, Chess Wizards, Scientists and Iconoclasts who were the Hero Programmers of the Software Revolution

The Advent of the Algorithm: The Idea that Rules the World

Moths in the Machine: The Power and Perils of Programming

Mastering Visual Basic .NET