onderscheid tussen design-time & run-time

Pagina: 1
Acties:

  • pkouwer
  • Registratie: November 2001
  • Laatst online: 07-10-2025
Hi,
Ik wil onderscheid kunnen maken tussen mijn VB-appl. wat draait in de design-time & run-time.

Als het programma via een exe gestart wordt, var = 1, als hij gestart wordt vanuit VB-IDE dan var = 0. Is dit mogelijk ?

  • johnwoo
  • Registratie: Oktober 1999
  • Laatst online: 12:47

johnwoo

3S-GTE

Probeer dit eens:
code:
1
2
3
4
5
6
Public Function InIDE() As Boolean 
    Debug.Assert Not TestIDE(InIDE) 
End Function 
Private Function TestIDE(Test As Boolean) As Boolean 
    Test = True 
End Function

4200Wp ZO + 840Wp ZW + 1680Wp NW | 14xIQ7+ + 1xDS3-L | MTVenusE | HWP1


  • RickN
  • Registratie: December 2001
  • Laatst online: 14-06-2025
Op woensdag 24 juli 2002 12:12 schreef johnwoo het volgende:
Probeer dit eens:
code:
1
2
3
4
5
6
Public Function InIDE() As Boolean 
    Debug.Assert Not TestIDE(InIDE) 
End Function 
Private Function TestIDE(Test As Boolean) As Boolean 
    Test = True 
End Function
Wow, als dit echt iets nuttigs doet is VB nog slechter dan ik al dacht, maar ik denk dat je ergens een foutje hebt gemaakt....

He who knows only his own side of the case knows little of that.


  • johnwoo
  • Registratie: Oktober 1999
  • Laatst online: 12:47

johnwoo

3S-GTE

Op woensdag 24 juli 2002 12:22 schreef RickN het volgende:

[..]

Wow, als dit echt iets nuttigs doet is VB nog slechter dan ik al dacht, maar ik denk dat je ergens een foutje hebt gemaakt....
Nope, het werkt echt :)
Ik heb het trouwens niet zelf verzonnen hoor, maar Google doet wonderen :)

[edit]
Als reactie op RickN, nog even een uitleg wat er precies gebeurt (het is vrij logisch als je erover nadenkt ;) )

De Debug routines zijn in een executable niet aanwezig. Dus als je het als exe draait is InIDE eigenlijk een lege functie, en retourneert dus de default Boolean waarde False.

Als je in de IDE draait moet InIDE True teruggeven. Iedere functie in VB heeft altijd een lokale variabele met de naam van de functie, waar je de return waarde naartoe kunt schrijven. Maar een Assert aanroep krijgt een expressie mee, geen statement. Je kan dus niet direct Debug.Assert InIDE = True doen, want dan controleert hij alleen maar of InIDE True is (wat niet het geval is en dus een break zou opleveren).
Daarom de extra hulpfunctie TestIDE. We geven de lokale variabele InIDE mee, die in TestIDE op True wordt gezet (de code werkt dus niet meer als je deze ByVal meegeeft). De return value van TestIDE blijft False; daarom de Not in Debug.Assert, anders zou VB breaken op dat punt. (In plaats van die Not zou je ook TestIDE True kunnen laten retourneren, maar dat is weer een extra regel ;) )
In ieder geval staat InIDE nu op True en zal de functie InIDE dus True teruggeven :)

Tot zover de VB analyse :P

4200Wp ZO + 840Wp ZW + 1680Wp NW | 14xIQ7+ + 1xDS3-L | MTVenusE | HWP1


  • tomato
  • Registratie: November 1999
  • Niet online
Wat jij beschrijft is niet het verschil tussen designtime en runtime ;)

  • johnwoo
  • Registratie: Oktober 1999
  • Laatst online: 12:47

johnwoo

3S-GTE

Op woensdag 24 juli 2002 12:30 schreef tomato het volgende:
Wat jij beschrijft is niet het verschil tussen designtime en runtime ;)
Ow damn, inderdaad :P Dit fragmentje bepaalt het verschil tussen runnen in de IDE en als executable :)
Maar dat is wel wat de topicstarter wilde weten: :Y)
Als het programma via een exe gestart wordt, var = 1, als hij gestart wordt vanuit VB-IDE dan var = 0. Is dit mogelijk ?
De topictitel is dus incorrect...

4200Wp ZO + 840Wp ZW + 1680Wp NW | 14xIQ7+ + 1xDS3-L | MTVenusE | HWP1


  • tomato
  • Registratie: November 1999
  • Niet online
johnwoo: Ow damn, inderdaad :P
Was eigenlijk bedoeld naar de topic-starter, jij gaf gewoon het antwoord dat hij wilde ;)
De topictitel is dus incorrect...
En de eerste zin uit zijn post ;)

  • pkouwer
  • Registratie: November 2001
  • Laatst online: 07-10-2025
wat is er dan precies fout aan, leg dat eens uit.
Als het progje loopt als zijnde een exe, dan is de var 1, in het andere geval is de var. 0

Makkelijker kan ik het niet maken (leuker wel) :)

  • GigaTexel_BE
  • Registratie: April 2002
  • Laatst online: 01-09 12:58

GigaTexel_BE

AMD MP²

ik zie ook soms Debug.Print

wat doet dit en waar zie je er de output van?

Siesteem Spekkies!


  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 09:31

Crazy D

I think we should take a look.

Op woensdag 24 juli 2002 20:05 schreef GigaTexel_BE het volgende:
ik zie ook soms Debug.Print

wat doet dit en waar zie je er de output van?
[url="http://msdn.microsoft.com/library/en-us/vbenlr98/html/vaobjDebug.asp"]Debug Object[/url]
The Debug object sends output to the Immediate window at run time.

Exact expert nodig?


Verwijderd

verschil tussen design time en runtime is . .. loopt mijn programma of niet . .. ik zie niet in hoe je zoiets moet kunnen 'zien' .. .want in design time.. . (oftewel . als je je programma nog aan het ontwerpen bent) dan loopt je programma nog helemaal niet . ..

het voorbeeld wat ik hierboven zie staan vertelt je of je in debug-mode zit . . of dat je in compiled-mode zit (heeft dus niks met runtime/designtime te maken)

Verwijderd

(oftewel . als je je programma nog aan het ontwerpen bent) dan loopt je programma nog helemaal niet
Jij hebt nog nooit met user controls gewerkt gok ik zo

  • pkouwer
  • Registratie: November 2001
  • Laatst online: 07-10-2025
ok. Ik wil het verschil kunnen zien of een prog nog in design-fase zit of dat het gestart wordt vanuit een exe.

Dat is toch niet moeilijk te begrijpen dacht ik zo...>:)

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 30-08 17:59

Gerco

Professional Newbie

Op donderdag 25 juli 2002 10:21 schreef Yarvieh het volgende:
Jij hebt nog nooit met user controls gewerkt gok ik zo
Dat is inderdaad een mooie, runnen in design time, VB zelf snapt het ook niet helemaal, als je een subclass hebt op een window schakelt VB steeds van running naar design, telkens als je de muis beweegt. Heel zenuwachtig gedoe kan ik je vertellen.

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


  • johnwoo
  • Registratie: Oktober 1999
  • Laatst online: 12:47

johnwoo

3S-GTE

Okee, ik zal proberen het voor eens en altijd duidelijk te maken ;) want er worden hier wat dingen door elkaar gehaald.

Een VB programma kan in drie fasen verkeren:
Designtime
Runtime - IDE (als je op F5 drukt)
Runtime - Executable (compiled)

Wat topicstarter wilde weten is het verschil tussen de laatste twee (runtime in IDE of als executable); dat is dus niet het verschil tussen designtime en runtime.

Dat verschil is over het algemeen niet zo interessant, behalve als je met UserControls werkt. Die worden namelijk ook geinstantieerd als jij ze op je form sleept in designtime; anders zou je UserControl natuurlijk geen UI kunnen tekenen terwijl hij op je formpje in de editor staat. Dus zelfs in designtime kan er code worden uitgevoerd in de IDE.

Ik hoop dat het nu duidelijk is :)

[edit] Gerco: inderdaad, telkens als er een message is voor je gesubclasste window schakelt VB heel even over naar Running om die message te verwerken. Ook als je je project saved krijg je dan wat geflits te zien :P
Ik dacht eigenlijk alleen dat VB mousemove (en wat andere) messages niet doorstuurde in designtime...

4200Wp ZO + 840Wp ZW + 1680Wp NW | 14xIQ7+ + 1xDS3-L | MTVenusE | HWP1


  • pkouwer
  • Registratie: November 2001
  • Laatst online: 07-10-2025
ok,ok.
Ik wil het verschil weten tussen de laatste 2. In IDE-runtime moet ik niet printen, via de exe wel. Duidelijk ?

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 30-08 17:59

Gerco

Professional Newbie

Op donderdag 25 juli 2002 12:10 schreef johnwoo het volgende:
[edit] Gerco: inderdaad, telkens als er een message is voor je gesubclasste window schakelt VB heel even over naar Running om die message te verwerken. Ook als je je project saved krijg je dan wat geflits te zien :P
Ik dacht eigenlijk alleen dat VB mousemove (en wat andere) messages niet doorstuurde in designtime...
Voor zover ik weet doet 'ie dat ook niet, niet de normale usercontrol_MouseMove enzo, maar je eigen WndProc zit VOOR de code die VB gebruikt om die events te 'vangen' (anders was het geen subclass), dus je WndProc wordt wel uitgevoerd, want VB komt daarna pas aan de beurt.

Ik moet zeggen dat ik het wel knap vind dat die IDE overschakelt naar running enzo, in principe is die hele IDE niet geschikt voor subclassing zooi, ik ben onder de indruk dat het uberhaupt de IDE niet per definitie crasht...

Ik heb een usercontrol gemaakt die zn parent window subclasst en dat gaat tot mijn opperste verbazing allemaal prima in de IDE :P

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


  • johnwoo
  • Registratie: Oktober 1999
  • Laatst online: 12:47

johnwoo

3S-GTE

Op donderdag 25 juli 2002 16:51 schreef Gerco het volgende:

[..]

Voor zover ik weet doet 'ie dat ook niet, niet de normale usercontrol_MouseMove enzo, maar je eigen WndProc zit VOOR de code die VB gebruikt om die events te 'vangen' (anders was het geen subclass), dus je WndProc wordt wel uitgevoerd, want VB komt daarna pas aan de beurt.

Ik moet zeggen dat ik het wel knap vind dat die IDE overschakelt naar running enzo, in principe is die hele IDE niet geschikt voor subclassing zooi, ik ben onder de indruk dat het uberhaupt de IDE niet per definitie crasht...

Ik heb een usercontrol gemaakt die zn parent window subclasst en dat gaat tot mijn opperste verbazing allemaal prima in de IDE :P
Hehe, totdat je app een foutje maakt, dan crasht wel gelijk heel VB mee :P (daarom zijn projecten met subclassing zo lastig te debuggen :( )

4200Wp ZO + 840Wp ZW + 1680Wp NW | 14xIQ7+ + 1xDS3-L | MTVenusE | HWP1


  • Sponge
  • Registratie: Januari 2002
  • Laatst online: 28-08 17:06

Sponge

Serious Game Developer

Check [url="http://www.pscode.com"]http://www.pscode.com[/url] Genoeg voorbeelden die met een div. by zero bepalen of je in IDE zit (of niet)

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 30-08 17:59

Gerco

Professional Newbie

Op donderdag 25 juli 2002 19:23 schreef johnwoo het volgende:
Hehe, totdat je app een foutje maakt, dan crasht wel gelijk heel VB mee :P (daarom zijn projecten met subclassing zo lastig te debuggen :( )
d0h!

Daar hebben ze bij MS een handig iets voor uitgevonden: dbgwndproc.dll (oid). Dan kun je veilig subclassen in de IDE, je kunt zelfs met de debugger door je wndproc heensteppen, en de stopknop gebruiken.

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!

Pagina: 1