Toon posts:

[VB6] Variable scope

Pagina: 1
Acties:

Verwijderd

Topicstarter
Euj iedereen!

Een vraagje, over iets waar ik zelf niet uitkom... Ik wil een variabele (zeg de varabele "mijnvar") declareren, en wel zo dat deze in elke sub een andere waarde aan kan nemen. Deze waardes mogen elkaar niet beïnvloeden. Dus hij moet eigenlijk zo private als het maar kan, maar ik wil 'm maar één keer declareren voor al m'n subs, of kan dat niet. Voorbeeld:
code:
1
2
3
4
5
6
7
8
9
10
11
Private mijnvar as integer

public sub eerstesub
  mijnvar = 1
  call tweedesub
  msgbox mijnvar
end sub

public sub tweedesub
  mijnvar = 2
end sub

en nu moet de messagebox 1 retourneren. Maar als ik deze code letterlijk invoer, krijg ik dus 2. Logisch, want er staat helemaal bovenaan 'private mijnvar as integer'
Snappen jullie de vraag?

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Als je variabelen wilt lokaal wilt gebruiken, moet je ze ook lokaal declareren: er wordt dan ruimte gereserveerd in het stukje geheugen wat een methode aanroep gebruikt.

Als je de variabele globaal declareert komt hij in 'globaal' geheugen en is hij dus overal te benaderen onder dezelfde geheugen locatie. De waarde is dan dus ook uitwisselbaar.

Kortom: het is niet mogelijk en ook niet goed uit te leggen. Hooguit zou je het als een 'aspect' (Aspect-oriented programming) van alle methoden kunnen zien, maar ik denk niet dat je daar direct aan dacht ;) .

Gewoon overal apart declareren dus :) .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


Verwijderd

Topicstarter
Hmmm... jammer, ik heb aardig wat subs ;)

Verwijderd

code:
1
2
3
4
5
6
7
8
9
10
11
private sub foo
    dim i as Integer
 
    bar i

    msgbox i
end sub

private sub bar(byref i as Integer)
    i = 1
end sub

Weet niet of dit werkt, maar het byref statement geeft het adres van een variabele door. Kijk in de help voor meer details omtrent byref.

Verwijderd

Als je meteen ff een linkje maakt naar het topic waar het allemaal om gaat, is je bedoeling duidelijker :):
[topic=392248/1/25]
Maar het lijkt me tamelijk onmogelijk, maar in dat andere topic heb ik al een vervangend antwoord gegeven.
Dit is een dubbel topic geworden lijkt me...