Seite 2 von 2

Re: Inline-Berechnungen funktionieren nicht (mehr)

Verfasst: 10.04.2020 11:55
von Lord
MightyMAC hat geschrieben:...
EDIT: Ich habe jetzt gerade PB 5.72 64-bit installiert. Hier funktioniert es ohne Probleme. D.h. das Problem tritt bei allen 32-bit Versionen auf. Das sollte es aber nicht, oder?
Das kann ich nicht bestätigen. Unter Win7 mit PB5.72LTSx86 erhalte ich als Ergebnis:
WholeHeight=47882.8125
Es ist exakt das Ergebnis wie mit der x64-Version.

Re: Inline-Berechnungen funktionieren nicht (mehr)

Verfasst: 10.04.2020 12:16
von MightyMAC
Mit beiden Procedures?

Re: Inline-Berechnungen funktionieren nicht (mehr)

Verfasst: 10.04.2020 13:53
von Andesdaf
Kann es unter 5.71 x86 bestätigen.

Re: Inline-Berechnungen funktionieren nicht (mehr)

Verfasst: 10.04.2020 14:23
von HeX0R
Scheint tatsächlich den Stack zu verknisknaddeln, zumindest bei x86 (und Win10?)

Aber der Code ist absolut furchtbar zur Ursachenforschung (o.k. nicht nur dafür...)!
Ich habe das mal aufs wesentliche reduziert:

Code: Alles auswählen

EnableExplicit

Procedure.d GetLineHeight()
	
	VectorFont(LoadFont(0, "Segoe UI", 12), 12)
	VectorTextHeight("a")

  ProcedureReturn 15.2
EndProcedure

Procedure.d GetWholeHeight()
	Protected Result.d
	
	Result = 0.0
	Debug "Stimmt: " + GetLineHeight()
	Result + GetLineHeight()
	Debug "Stimmt nicht: " + Result

  ProcedureReturn Result
EndProcedure

OpenWindow(0, 0, 0, 500, 300, "Test")
CanvasGadget(0, 0, 0, 500, 300)
StartVectorDrawing(CanvasVectorOutput(0))
Debug "Stimmt natürlich auch nicht: " + GetWholeHeight()
StopVectorDrawing()
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow


Re: Inline-Berechnungen funktionieren nicht (mehr)

Verfasst: 10.04.2020 16:00
von mk-soft
Die VectorDrawing zerstört unter Windows 10 (PB-X86) die Floating-Point Registers (Floating-Point-Stack?)

Habe den ASM-Code und den Stack (ESP) überprüft. Stack (ESP) ist Ok

Code: Alles auswählen

EnableExplicit

LoadFont(0, "Segoe UI", 12)

Procedure.d GetLineHeight(Font)
  Protected r1.d
  
  If StartVectorDrawing(WindowVectorOutput(0))
    VectorFont(FontID(Font))
    r1 = VectorTextHeight("a")
    StopVectorDrawing()
  EndIf
  
  ProcedureReturn r1
EndProcedure

Procedure.d GetLineHeight2(Font)
  Protected r1.d
  
  If StartDrawing(WindowOutput(0))
    DrawingFont(FontID(Font))
    r1 = TextHeight("a")
    StopDrawing()
  EndIf
  
  ProcedureReturn r1
EndProcedure


Procedure.d GetWholeHeight()
   Protected Result.d
   
   Debug "VectorDrawing"
   Result = 0.0
   Debug "Ok: " + GetLineHeight(0)
   Result + GetLineHeight(0)
   Debug "Faild: " + Result
   Debug "2dDrawing"
   Result = 0.0
   Debug "Ok: " + GetLineHeight2(0)
   Result + GetLineHeight2(0)
   Debug "Ok: " + Result

  ProcedureReturn Result
EndProcedure

OpenWindow(0, 0, 0, 500, 300, "Test")
Debug "Result: " + GetWholeHeight()
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow

Re: Inline-Berechnungen funktionieren nicht (mehr)

Verfasst: 10.04.2020 16:24
von mk-soft

Re: Inline-Berechnungen funktionieren nicht (mehr)

Verfasst: 11.04.2020 11:14
von Lord
MightyMAC hat geschrieben:Mit beiden Procedures?
Mit beiden Prozeduren.

Re: Inline-Berechnungen funktionieren nicht (mehr)

Verfasst: 12.04.2020 17:03
von MightyMAC
Danke an euch alle für eure Rückmeldungen und insbesondere an mk-soft für die Bug-Meldung. Das Projekt, das mir vor einem halben Jahr Probleme bereitet hat verwendet die PB-Vector-Library nicht, allerdings verwende ich dort GDI+. Verwendet das auf Betriebssystemseite zufällig die selben Bibliotheken/Resourcen?