Seite 1 von 1

PB4.2B unter Vista beim beenden zeigt Deb. einen Mem-Fehler

Verfasst: 03.01.2008 14:43
von Falko
Folgenden Testsource aus der neuen Beta habe ich aus der IDE mit
eingeschalteten Debugger getestet:

ImageMenu.pb

Code: Alles auswählen

If OpenWindow(0, 100, 100, 300, 300, "PureBasic Office Menus")
    
  LoadImage(0,"kerze.ico")
  
  If CreateImageMenu(0, WindowID(0))
    MenuTitle("File")
    MenuItem( 1, "Open...", ImageID(0))
    MenuItem( 2, "Save"+Chr(10)+"Ctrl+S")
    MenuItem( 3, "Close", ImageID(0))
    MenuBar()
    MenuItem( 4, "Quit")
    
    DisableMenuItem(0, 3, 1) 
  EndIf
  

  Repeat 
    Select WaitWindowEvent() 
      Case #PB_Event_Menu 
        Debug EventMenu()
          
      Case #PB_Event_CloseWindow
        Break ; Quit the forever loop
        
    EndSelect
  ForEver
EndIf
;End ;<-- ohne dieses End gibt es in PB ein Memoryfehler im Betabeispiel!
Läuft soweit prima, sobald ich aber beim OS: Vista Ultimat 32-Bit
auf die Schliessbox klicke taucht bei mir in der Statusleiste
folgende Debug-Fehlermeldung auf:
[ERROR] ImageMenu.pb (Line:28) -- also nach dem letzten Endif wo nix ist.
[ERROR]Invalid memory acces. (read error at adress 23526391)

Wenn ich am Sourceende ein End hinzufüge, läuft das Programm so wie es
soll.
Das Komische ist aber, das unter Windows Me der gleiche Source ohne
End keine Probleme macht

Kann das jemand unter den Vistanutzern bestätigen?

Gruß Falko

Verfasst: 03.01.2008 15:09
von bobobo
hab kein vista .. aber in der Hilfe steht folgendes
End
Beendet ordentlich die Programmausführung. Der ....
das bedeutet wohl , dass ein nichtbenutzen von End unordentlich ist (was
bei einem NichtBetriebssystem wie ME scheinbar egal ist) Bei Betriebssystemen kann das dann schonmal Auswirkungen haben.

Kompiliert und ohne Debugger siehst Du die Meldung dann nicht und
der Desktop wird eventuell refresht oder sowas ..

Verfasst: 03.01.2008 16:49
von mardanny71
Habe keine Fehlermeldung.
WinXP SP2
Ist also Vista - typisch.Vielleicht die Compiler - Settings.

gruss
mardanny71

Verfasst: 03.01.2008 17:55
von Falko
Nö, ist auch nur ab Vista so. Dieses wird auch nur unter Vista angezeigt
und nicht in den alten Windowsen.

Auch mit den Compilereinstellungen hat's wirklich nichts zu tun.

Es ist aber kein Problem, weil bei Vista wird es wenigstens angezeigt
das man nach dieser Fehlermeldung daran denken soll ein "End" zu setzen :lol:

Gruß, Falko

Verfasst: 03.01.2008 17:59
von bobobo
du machst ja auch das licht aus und die tür zu wenn du das haus verlässt 8)

Verfasst: 03.01.2008 20:28
von Falko
@bo³
Sicher hast du hierzu auch noch einen passenden Schalter, oder?
also am End liegt das nicht, sondern irgendwie wird das durch
Leerzeichen hinter dem Break hervorgerufen.

Folgender Sourcecode wird korrekt in Vista ausgeführt und erzeugt
beim Beenden keinen Fehler (Debugger eingeschaltet und F5)!

Code: Alles auswählen

If OpenWindow(0, 100, 100, 300, 300, "PureBasic Office Menus")
    
  LoadImage(0, "kerze.ico")
  
  If CreateImageMenu(0, WindowID(0))
    MenuTitle("File")
    MenuItem( 1, "Open...", ImageID(0))
    MenuItem( 2, "Save"+Chr(10)+"Ctrl+S")
    MenuItem( 3, "Close", ImageID(0))
    MenuBar()
    MenuItem( 4, "Quit")
    
    DisableMenuItem(0, 3, 1) 
  EndIf
  
  Repeat 
    Select WaitWindowEvent() 
      Case #PB_Event_Menu 
        Debug EventMenu()
          
      Case #PB_Event_CloseWindow
        Break ; Quit the forever loop
    EndSelect
  ForEver
EndIf 
Und dieser original Beta-Source hat wohl einen Wechselschalter eingebaut,
der den Fehler in Vista hervorruft :lol:

Code: Alles auswählen

If OpenWindow(0, 100, 100, 300, 300, "PureBasic Office Menus")
    
  LoadImage(0, "kerze.ico")
  
  If CreateImageMenu(0, WindowID(0))
    MenuTitle("File")
    MenuItem( 1, "Open...", ImageID(0))
    MenuItem( 2, "Save"+Chr(10)+"Ctrl+S")
    MenuItem( 3, "Close", ImageID(0))
    MenuBar()
    MenuItem( 4, "Quit")
    
    DisableMenuItem(0, 3, 1) 
  EndIf
  
  Repeat 
    Select WaitWindowEvent() 
      Case #PB_Event_Menu 
        Debug EventMenu()
          
      Case #PB_Event_CloseWindow
        Break ; Quit the forever loop
        
    EndSelect
  ForEver
EndIf 
Vielleicht kann jemand mit Vista diese beiden Sourcecodes bitte mal probieren.
Gruss Falko

Verfasst: 03.01.2008 23:46
von edel
Schalte den Profiler aus.

Verfasst: 03.01.2008 23:54
von Falko
Danke @edel,

dann ist der Profiler an diesem Bug schuld, wenn ich das richtig verstehe.
Habe ihn nun ausgeschaltet und so läuft der sourcecode.

Grüße.. Falko

Verfasst: 17.01.2008 00:27
von Falko
edel hat geschrieben:Schalte den Profiler aus.
Nun funktioniert es mit dem heutigem Profiler (siehe freaks posting) :allright:

Grüße, Falko