[VB6] too many local, nonstatic variables. En Undimmen?

Pagina: 1
Acties:

  • roy-t
  • Registratie: Oktober 2004
  • Laatst online: 17-10 16:43
Vandaag kwam ik een erg vervelende bug tegen. In VB6, de bug is bekend en staat beschreven op
BUG: "Too Many Local, Nonstatic Variables" Error Message

De bug is blijkbaar nooit opgelost.

Nu heb ik dat artikel gelezen, maar ik denk niet dat het helemaal bij mijn situatie past. Ik heb een public type in een module staan, met daar 18 strings * 750 ,en 1 string * 20 in.
(ik probeer dus 13520 tekens op te gaan slaan. )

In een module op het form probeer ik daarna 2 instanties te maken van dit type

Dim tOud as OV_Type
Dim tNieuw as OV_Type
(om daarna 2 bestanden te opnenen en deze te vergelijken)

maar bij de 2e dim krijg ik de error "too many local, nonstatic variables" deze volgens de help functie in de offline MSDN van mijn VB6 EE komt dit voor als ik 32kb of meer aan variabelen probeer te declareren. De oplossing daar is omwerken naar statics, maar daar heb ik niks aan denk ik.


De oplossing op MSDN op internet snap ik niet helemaal omdat ze het over DLLs hebben die ik niet gebruik (of misschien wel maar dan indirect via de compiler)

een andere workaround zou het volgende kunnen zijn, ik heb namelijk maar 1 variabele nodig uit het file, (die string van 20) maar dan zou ik met de hand de lengte voor in de functie open as random len = len (tOud) moeten berekenen en ik heb geen idee hoe dat moet.

Ik zou ook maar 1 variabele tOud of tNieuw tegelijkertijd kunnen gebruiken. Door nog 2 andere strings te dimmen van elk 20 lang in de module zelf en hier meteen de data in te dumpen maar hoe 'undim' ik daarna tOud? Ik heb hiernaar gezocht op google maar kan geen undim functie vinden (misschien verkeerde naam?) Dit lijkt me zowieso een handige functie voor me.

Ik ben al een heel eind met de oplossing maar dit stukje kom ik niet verder mee.

(btw SP6 lost het niet op)

Groeten, de alweer wanhopige therat10430!

~ Mijn prog blog!


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Waarom gebruik je dan niet gewoon een class in plaats van een UDT?
Verder is de workaround (of "resolution") in dat artikel ook prima te gebruiken, maar wat omslachtiger/ranziger en is eigenlijk inderdaad alleen interessant als je andere DLL's aanroept (wat je dus blijkbaar niet doet).

oh, ik lees nu je TS opnieuw en begrijp het pas (beter). Waarom lees je niet gewoon een sting in van X lengte en pak je er met de MID functie een stuk uit? Die lengte bereken je gewoon door het aantal bytes die die UDT in beslag neemt bij elkaar op te tellen.

Het hele undim verhaal is me compleet onduidelijk. Iets UNDimmen kan niet, je kunt wel re-dimmen of je variabele gewoon out-of-scope laten gaan.

[ Voor 104% gewijzigd door RobIII op 09-01-2007 13:55 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Kuhlie
  • Registratie: December 2002
  • Niet online
Ik denk dat je probleem zit in het feit dat VB 2 bytes per teken voor een String gebruikt, ik dacht dat het om UTF16 ging. Dat betekent dat jouw Type niet 13520 bytes, maar 27040 bytes groot is. Neem daar 2 van en, grote truuk, je hebt meer dan 32 KB :)

  • roy-t
  • Registratie: Oktober 2004
  • Laatst online: 17-10 16:43
:P he je fucking 768MB DDR ram, gaat VB moeilijk doen als ik over 32KB kom, achja 32KB should be enough for everyone :P

Maar dit topic kan dicht, ik heb mijn codes nog is grondig bekeken en op zeer geniale (ahum not), maar iets minder leesbare wijze. de code omgewerkt naar werken met 2 string*20's en 1 Type. Ik hoop alleen dat ik niet in een van mijn volgende formpies meer dan 18*750 tekens moet opslaan :S maarja, door karren maar :P bedankt voor de berichten!

~ Mijn prog blog!


Verwijderd

'Ik heb een public type in een module staan, met daar 18 strings * 750 ,en 1 string * 20 in.
(ik probeer dus 13520 tekens op te gaan slaan. )'

Doe dat ff lekker in een geindexeerd bestand zou ik dan zeggen ;)

  • roy-t
  • Registratie: Oktober 2004
  • Laatst online: 17-10 16:43
Verwijderd schreef op dinsdag 09 januari 2007 @ 14:41:
'Ik heb een public type in een module staan, met daar 18 strings * 750 ,en 1 string * 20 in.
(ik probeer dus 13520 tekens op te gaan slaan. )'

Doe dat ff lekker in een geindexeerd bestand zou ik dan zeggen ;)
Dat doe ik ook lekker, maar ik wil de gegevens eventjes tegelijk in het geheugen laden, en daar komt de fout. (oh btw die 13520 tekens zijn natuurlijk verschillende velden, anders had ik wel in 1x 13520 opgeslagen :) om mogelijke verwarring weg te nemen. )

~ Mijn prog blog!

Pagina: 1