![]() |
AW: Variablen nicht NIL 64Bit
Ich bin mir ziemlich sicher, dass das "schnipp schnapp" nur dazu diente, Teile vom Code in denen er nichts geändert hat nicht unnötig nochmals zu posten um den Abschnitt klein und übersichtlich zu halten. Ob da etwas steht oder nicht macht für den genannten Weg hin zur "Compilerhinweis-Freiheit" nämlich keinen Unterschied. Manchmal frage ich mich, warum du überhaupt Fragen stellst, wenn du am Ende eh nicht wirklich Hilfe annimmst und (meist fälschlicherweise) meinst es wäre doch eh von Anfang an alles richtig bei dir. Komisches Verhalten um ehrlich zu sein. Auch nicht lustig.
|
AW: Variablen nicht NIL 64Bit
Ich hab mal an die entsprechenden Stellen Kommentare gepackt und sie mit SG markiert.
Delphi-Quellcode:
var
Graphics: LONG_PTR; Fam: GpFontFamily; TempFont: GpFont; rb: TRect; xWidth, YHeight: Integer; strFormat: GPSTRINGFORMAT; boundingBox, layoutRect: TGPRectF; begin result := GenericError; strFormat := nil; Fam := nil; TempFont := nil; ..// hier kommt Warnung unter D2010 in Delphi 10.2.3 nicht. Deshalb war es vorher nicht addiert. // habe es aber jetzt trotzdem addiert und ignoriere die Warnung. // SG: Einige Hinweise in Bezug auf nicht initialisierte Variablen oder nicht benutzte Werte // wurden erst jüngst in 10.1 oder 10.2 gefixt, siehe Changelogs/fixed issues, daher fälschlicherweise Hinweis unter Delphi 2010 Graphics := 0; try GdipCheck(GdipCreateFontFamilyFromName(PWideChar(UseFont), FontCollection, Fam)); if Assigned(Fam) then begin GdipCheck(GdipCreateFont(Fam, UseSize, FontStyle, 2, TempFont)); if Assigned(TempFont) then begin // 0: Kein Schatten // Positiver wert für Schatten Rechts // Negativer wert für Schatten links // Zeichne den string GdipCheck(GdipCreateStringFormat(0, 0, strFormat)); GdipCheck(GdipCreateFromHDC(DC, Graphics)); FillChar(boundingBox, SizeOf(boundingBox), 0); FillChar(layoutRect, SizeOf(layoutRect), 0); GdipCheck(GdipMeasureString(Graphics, PWideChar(UseText), length(UseText), TempFont, @layoutRect, strFormat, @boundingBox, nil, nil)); if Assigned(strFormat) then GdipCheck(GdipDeleteStringFormat(strFormat)); if not WordWrap then begin xWidth := round(boundingBox.Width + 0.5); YHeight := round(boundingBox.Height + 1.5); if BlurText then begin SetRect(rb, rec.Left, rec.Top, rec.Left + xWidth, rec.Top + YHeight); BlurTextPlus(DC, UseText, rb, TempFont, BlurColor, 4, UseStrFormat); end; end else begin xWidth := rec.Right; YHeight := rec.Bottom; if BlurText then begin SetRect(rb, rec.Left, rec.Top, rec.Left + xWidth, rec.Top + YHeight); BlurTextPlus(DC, UseText, rb, TempFont, BlurColor, 4, UseStrFormat); end; end; result := DrawStringFormatedEx(Graphics, UseText, rec.Left, rec.Top, xWidth, YHeight, ColrARGB, SkinEngine.SK_TEXTRENDERING, TempFont, ShadowOffset, UseStrFormat); end; end; finally if Graphics <> 0 then begin GdipCheck(GdipDeleteGraphics(Graphics)); Graphics := 0; end; if Assigned(TempFont) then // SG: Dieser Code kann ausgeführt werden wenn z.B. oben if Assigned(Fam) false lieferte. // Dann wird TempFont nämlich nicht durch GdipCreateFont gesetzt und ist somit nicht initialisiert // Da nun aber auf dem Stack unter 32bit "immer" nil stand, hat man hier Glück gehabt begin GdipCheck(GdipDeleteFont(TempFont)); // Und hier kracht es unter Win10 wenn TempFont mit irgendwas gefüllt wird. (In D2010 nicht! ) TempFont := nil; end; if Assigned(Fam) then begin GdipCheck(GdipDeleteFontFamily(Fam)); Fam := nil; end; end; end; |
AW: Variablen nicht NIL 64Bit
Zitat:
Das haben aber einige Leute hier nicht verstanden und haben versucht mir was zu erklären was mir selbst vorher schon klar war. Deshalb habe ich auf diese Beiträge auch nicht mehr bzw. patzig geantwortet. Durch das setzen von NIL ist ja nun alles geklärt und das Thema erledigt. Auch wenn D2010 mir immer noch falsche Hinweise ausgibt.. sei's drum. Man baut sich solche unnötigen Fehler selbst ein weil man sich auf den Compiler und seinen Warnungen verlässt stimmen diese nicht nun dann kracht es wie hier geschehen. @Stevie Danke du hast mich verstanden und nicht versucht mich zu belehren. PS: Zitat:
Ich habe von Anfang an deutlich darauf hingewiesen! Zitat:
Es hatte unter 32Bit keinerlei Auswirkung nachdem ich diese auf Grund der Warnung entfernt hatte, hingegen unter 64Bit schon. gruss |
AW: Variablen nicht NIL 64Bit
[OT]
@Emil, Du musst die Beiträge einfach nicht als Angriff gegen Dich auffassen. Wir versuchen, uns hier gegenseitig zu helfen. Kann sein, dass man sich nicht immer komplett versteht, dann kann man versuchen, das auszuräumen. Dennoch ist eine gut gemeinte Antwort eine nette Sache, auch wenn sie nicht zum Erfolg führt oder gar die Frage gar nicht beantwortet. Ich hatte mir Deine Beiträge auch gerade durchgelesen, um evtl. helfen zu können. Deine Antworten machten es nicht einfacher, das Problem nachzuvollziehen. Offensichtlich hat es Stevie ja jetzt aufklären können. ME sollte aber das letzte "TempFont := nil;" einen Hinweis erzeugen, dass die Variable nicht mehr genutzt wird. Vielleicht ist das aber auch in verschiedenen Delphiversionen unterschiedlich... @all: Lässt sich dieser Hinweis eigentlich abschalten? Ich würde manchmal eine solche abschließende Zuweisung der Übersichtlichkeit halber gern vornehmen. Um keine Compiler-Hinweise zu erhalten schmeiße ich die dann aber doch raus. [/OT] |
AW: Variablen nicht NIL 64Bit
Zitat:
Zitat:
gruss |
AW: Variablen nicht NIL 64Bit
Zitat:
Zitat:
|
AW: Variablen nicht NIL 64Bit
Zitat:
![]()
Delphi-Quellcode:
Ob das nun allerdings der Lesbarkeit förderlich ist sei mal dahingestellt.
{$HINTS OFF}
TempFont := nil; {$HINTS ON} |
AW: Variablen nicht NIL 64Bit
Es ist ja eine Warnung kein Hint (Hinweis)
gruss |
AW: Variablen nicht NIL 64Bit
Zitat:
Delphi-Quellcode:
TempFont := nil; // H2077 Auf 'TempFont' zugewiesener Wert wird niemals benutzt
H2077 ist ein Hinweis. Warnungen haben W-Nummern. Siehe auch hier: Zitat:
|
AW: Variablen nicht NIL 64Bit
OK sorry ;)
gruss |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:38 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz