Im Code unten in Zeile 50 behauptet der Debugger "The Stack is no more 16 bytes aligned !" und bei Aufruf der in Zeile 50 gemeinten Procedure bricht das Programm bei DrawText ab mit der Meldung "Ungültiger Speicherzugriff (Lesefehler an der Adresse 0)". Genau diese Procedure funktioniert aber einmal einwandfrei.
Im Testprogramm wird der Text oben links im Fenster mit dieser Procedure gezeichnet. Dann auf den Button "Zum Fehler..." klicken. Jetzt wird die Procedure nochmal aufgerufen, aber mit dem seltsamen Resultat.
Wenn das ein Fehler von mir ist - Bitte auf die Finger hauen ;o)
System: Windows 7 x64, PB 4.50 Beta 3 x64
Und hier der ziemlich gekürzte Code zum reproduzieren:
Code: Alles auswählen
Enumeration
#Image_TopBar_Main1
#Image_TopBar_Main2
#Gadget_TopBar_Main
#Gadget_Main_Error
EndEnumeration
Procedure Prepare_Main(string.s)
StartDrawing(ImageOutput(#Image_TopBar_Main2))
DrawImage(ImageID(#Image_TopBar_Main1), 0, 0)
DrawText(0,0,string)
StopDrawing()
EndProcedure
CreateImage(#Image_TopBar_Main1, 800, 50)
CreateImage(#Image_TopBar_Main2, 800, 50)
StartDrawing(ImageOutput(#Image_TopBar_Main1))
Box(0, 0, 800, 50, $000000)
StopDrawing()
OpenWindow(0, 0, 0, 800, 600, "Test...", #PB_Window_MinimizeGadget)
ImageGadget(#Gadget_TopBar_Main, 0, 0, 800, 50, ImageID(#Image_TopBar_Main2))
Main:
Prepare_Main("Hier funktionierts noch...")
SetGadgetState(#Gadget_TopBar_Main, ImageID(#Image_TopBar_Main2))
ButtonGadget(#Gadget_Main_Error, 15, 70, 100, 20, "Zum Fehler")
action = -1
Repeat
Event = WaitWindowEvent()
Select Event
Case #PB_Event_CloseWindow
action = 0
Case #PB_Event_Gadget
Select EventGadget()
Case #Gadget_Main_Error
action = 1
EndSelect
EndSelect
Until action > -1
Select action
Case 0 : End
Case 1 : Goto Fehler
EndSelect
End
Fehler:
Prepare_Main("Das geht nicht mehr ???")
SetGadgetState(#Gadget_TopBar_Main, ImageID(#Image_TopBar_Main2))
Repeat
Event = WaitWindowEvent()
Select Event
Case #PB_Event_CloseWindow
End
EndSelect
ForEver