![]() |
AW: Integerüberlauf bei LongWord
Zitat:
Zitat:
|
AW: Integerüberlauf bei LongWord
Hallo,
ich denke, der Hinweis mit der Überlaufprüfung hilft hier. Wenn im alten Programm keine Fehlermeldung kam, war dort vielleicht die Prüfung ausgeschaltet? Heiko |
AW: Integerüberlauf bei LongWord
Zitat:
|
AW: Integerüberlauf bei LongWord
@Lemmy:
Da habe ich gepennt. Habe natürlich mit XE2 getestet. Was Anderes habe ich hier nicht zur Verfügung. |
AW: Integerüberlauf bei LongWord
Hallo Lemmy,
Ich habe jetzt mal die Bereichsprüfung und die Überlaufprüfung ausgeschaltet mit {$R-,Q-} Der Fehler tritt immer noch auf. Außerdem: In der Graphics.pas steht folgender Code:
Delphi-Quellcode:
Auch hier mommt seit Kurzem der Runtime-Error.
procedure TBitmap.ReadDIB(Stream: TStream; ImageSize: LongWord);
... RLEStream.Seek(-ImageSize, soFromEnd); .... |
AW: Integerüberlauf bei LongWord
bei mir in Delphi 7 steht da:
Delphi-Quellcode:
Insofern wird sich ggf. das Compilerverhalten an der Stelle in den neuen Delphis inzwischen verändert haben....
{ Cast ImageSize (long word) to integer to avoid integer overflow when negating. }
RLEStream.Seek(-Integer(ImageSize), soFromEnd); Zitat:
|
AW: Integerüberlauf bei LongWord
Bereichs- und Überlaufprüfung sind sowohl in den Project-Einstellungen
wie auch im Code ( mit {$R-,Q-} ) ausgeschaltet. Trotzdem tritt der Fehler auf |
AW: Integerüberlauf bei LongWord
war es schon immer ausgeschaltet oder hast Du es ausgeschaltet? Und hast Du das Projekt schon mal neu erstellt / vollständig compiliert? Hast Du die dcus schon mal gelöscht (also die dcus der Projektsourcen und nicht von irgend welchen Komponenten von denen du nur die dcus hast)?
|
AW: Integerüberlauf bei LongWord
Zitat:
Nachdem ich nun ein paar Mal mit den Optionen "Bereichsprüfung" und "Overflow checking" herumgespielt habe scheint jetzt wieder alles zu funktionieren: Wenn die Optionen eingeschaltet sind, kommt eine Fehlermeldung. Wenn die Optionen ausgeschaltet sind, läuft alles ohne Fehler durch. Warum ich vorher die Probleme hatte kann ich also nicht mehr nachvollziehen. Aber Danke ann alle, die mir bei der fehlersuche geholfen haben. Ing |
AW: Integerüberlauf bei LongWord
Delphi rechnet immer erst mit dem QuellTyp weiter, bzw. mit dem kleinsten "gemeinsamen" Typ, der bei der jeweiligen Teiloperation nötig ist.
LongWord > Negation Unäre Operation > LongWord (und das kann nicht negativ sein) > Zuweisung > Integer/LongInt (da Zieltyp = Integer)
Delphi-Quellcode:
i := -Integer(W); // geht nur, wenn W < 2 Milliarden (maximal 31 Bit genutzt)
i := -Int64(W); // falls an "richtig" rechnen muß // oder du schaltest die Bereichsprüfung ab, bzw. bzw gezielt dort an, wo sie auch nötig ist |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:45 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