Delphi-PRAXiS
Seite 4 von 4   « Erste     234   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Programm-Absturz seit Delphi 11.2 (https://www.delphipraxis.net/211577-programm-absturz-seit-delphi-11-2-a.html)

jziersch 10. Okt 2022 07:03

AW: Programm-Absturz seit Delphi 11.2
 
Zitat:

Zitat von walterschmitt (Beitrag 1513006)
Bei mir zeigt die Speicheradresse der Variablen auf $FFFFFFFF930FFA58 und damit ins Nirvana.Sollte eigentlich $00000000930FFA58 sein.

Überprüfe mal alle Variablen die an die Komponente übergeben werden. Kein Zeiger darf Cardinal sein, sondern stattdessen ein IntPtr. In altem 32bit code finden sich manchmal noch Cardinals.
Der Crash ist dann abhängig vom System, Speicheraufbau etc.

himitsu 10. Okt 2022 09:03

AW: Programm-Absturz seit Delphi 11.2
 
Zitat:

... IntPtr ... Cardinals ...
Oder gar Integer (31 Bit) mit Prüfungen auf < 0, drum ist IMAGE_FILE_LARGE_ADDRESS_ AWARE nicht standardmäßig aktiv. :stupid:

UIntPtr
IntPtr
NativeUInt
NativeInt

und allgemein überall die richtigen Typen, wie z.B. LPARAM, WPARAM und LRESULT für SendMessage/PostMessage, anstatt Integer/Cardinal usw.
oder andersrum z.B. HRESULT statt Integer/Cardinal/Sonstwar für das aus GetLastError und Co.



Hier sieht es eher so aus, als wenn signed 32 Bit-Integer-Zeiger (nicht unsigned Cardinal) an einen 64 Bit-Integer übergeben/gecastet wird.
$9xxxxxxx hat das höchste Bit gesetzt, drum wird/bleibt das negaitv, also es werden auch alle 32 höheren Bits negativ.

In Bezug auf einen Integer->Int64 ist es vollkommen korrekt, dass es ab $800000000 zu $FFFFFFFF800000000 wird. :angle:

peterbelow 10. Okt 2022 11:51

AW: Programm-Absturz seit Delphi 11.2
 
Zitat:

Zitat von walterschmitt (Beitrag 1513006)
Habe doch ein Demoprogramm an den Hersteller geschickt.
Das Programm war ein Fenster mit nichts anderem als nur dieser Komponente.
Bei mir Crash, beim Hersteller läuft es.
Glaube langsam es liegt an meiner Windows-Installation.
Habe auch den Sourcecode und kenne die verantwortliche Codezeile.
Bei mir zeigt die Speicheradresse der Variablen auf $FFFFFFFF930FFA58 und damit ins Nirvana.
Sollte eigentlich $00000000930FFA58 sein.

Das sieht so aus als wenn ein 32-bit signed integer auf ein 64 bit signed integer (oder pointer) gecasted wird...

walterschmitt 10. Okt 2022 15:16

AW: Programm-Absturz seit Delphi 11.2
 
Nachdem ich die Stelle im Quellcode der Komponente genau identifizieren konnte, wo bei mir der Fehler auftrat und welche Werte die Variablen haben, hat der Komponentenhersteller die Sache gefixt.
Es war ein Pointerproblem.
Jetzt läuft es.

Sherlock 11. Okt 2022 09:43

AW: Programm-Absturz seit Delphi 11.2
 
:dp:

*Mike drop*

Sherlock

rwalper 12. Okt 2022 10:44

AW: Programm-Absturz seit Delphi 11.2
 
Von mir auch ein kurzes Update: das Problem ist nun auch bei uns gefixed.
Der Fehler lag in einer sehr alten Komponente, wo ein Pointer über Longint gecastet wurde (alle Casts von Integer() und Cardinal() haben wir ja gefunden, aber leider nicht nach Longint() gesucht).
Mit abgeschaltetem ASLR ist das Programm wieder gestart, wenn auch mit anderen Fehlern. Nach dem temporären Entfernen der Komponente hat alles wieder funktioniert.
Vielen Dank für eure Hilfe.:)


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:43 Uhr.
Seite 4 von 4   « Erste     234   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz