Inline-Berechnungen funktionieren nicht (mehr)

Anfängerfragen zum Programmieren mit PureBasic.
Lord
Beiträge: 313
Registriert: 21.01.2008 19:11

Re: Inline-Berechnungen funktionieren nicht (mehr)

Beitrag 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.
Bild
MightyMAC
Beiträge: 55
Registriert: 07.01.2007 18:11
Wohnort: Duisburg
Kontaktdaten:

Re: Inline-Berechnungen funktionieren nicht (mehr)

Beitrag von MightyMAC »

Mit beiden Procedures?
Windows XP 32-bit SP3, Windows 7 64-bit, PB 4.60, PB 5.11, PB 5.20
Andesdaf
Moderator
Beiträge: 2660
Registriert: 15.06.2008 18:22
Wohnort: Dresden

Re: Inline-Berechnungen funktionieren nicht (mehr)

Beitrag von Andesdaf »

Kann es unter 5.71 x86 bestätigen.
Win11 x64 | PB 6.00 (x64)
Benutzeravatar
HeX0R
Beiträge: 2959
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win10 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2
Kontaktdaten:

Re: Inline-Berechnungen funktionieren nicht (mehr)

Beitrag 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

Benutzeravatar
mk-soft
Beiträge: 3701
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Inline-Berechnungen funktionieren nicht (mehr)

Beitrag 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
Zuletzt geändert von mk-soft am 10.04.2020 16:27, insgesamt 1-mal geändert.
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
mk-soft
Beiträge: 3701
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Inline-Berechnungen funktionieren nicht (mehr)

Beitrag von mk-soft »

Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Lord
Beiträge: 313
Registriert: 21.01.2008 19:11

Re: Inline-Berechnungen funktionieren nicht (mehr)

Beitrag von Lord »

MightyMAC hat geschrieben:Mit beiden Procedures?
Mit beiden Prozeduren.
Bild
MightyMAC
Beiträge: 55
Registriert: 07.01.2007 18:11
Wohnort: Duisburg
Kontaktdaten:

Re: Inline-Berechnungen funktionieren nicht (mehr)

Beitrag 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?
Windows XP 32-bit SP3, Windows 7 64-bit, PB 4.60, PB 5.11, PB 5.20
Antworten