Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Code mit AnsiString lief unter 10.0 Seattle, crasht unter 10.4 Sydney (https://www.delphipraxis.net/204610-code-mit-ansistring-lief-unter-10-0-seattle-crasht-unter-10-4-sydney.html)

Der schöne Günther 12. Jun 2020 08:07

AW: Code mit AnsiString lief unter 10.0 Seattle, crasht unter 10.4 Sydney
 
Ah danke, jetzt habe sogar ich das verstanden. Und ja, unter 10.4 Sydney sieht es nun anders aus:

Delphi-Quellcode:
function _LStrToPChar(const S: _AnsiStr): _PAnsiChr;
begin
  if Pointer(s) = nil then
    Result := @(PEmptyString(Pointer(EmptyStringA))^.Nul)
  else
    Result := Pointer(s);
end;
Vorher (laut dir):
Delphi-Quellcode:
function _LStrToPChar(const S: _AnsiStr): _PAnsiChr;
begin
  if Pointer(s) = nil then
    Result := @(PEmptyString(@EmptyStringA[1])^.Nul)
  else
    Result := Pointer(s);
end;
Aus
Delphi-Quellcode:
@EmptyStringA[1]
wurde
Delphi-Quellcode:
Pointer(EmptyStringA)
. Vielen Dank. Ich konnte nichts finden weshalb das geändert worden ist. Außerdem spielen leere Strings hier ja keine Rolle. Wahrscheinlich hat sich noch mehr geändert.

PS: Unter 64 Bit funktioniert alles weiterhin wie gehabt. Wahrscheinlich steckt irgendwo ein Fehler in diesem mystischen Assemblercode.

PPS: Ich habe mal einen neuen Eintrag angelegt unter
https://quality.embarcadero.com/browse/RSP-29567

jaenicke 12. Jun 2020 09:11

AW: Code mit AnsiString lief unter 10.0 Seattle, crasht unter 10.4 Sydney
 
Ich kann das leider nicht reproduzieren. Ich habe es einmal mit
Delphi-Quellcode:
GetTimeUTC(Application.ExeName)
versucht. Hättest du einmal ein komplettes Beispiel mit dem Aufruf? Das würde ich bei einer Bugmeldung dringend empfehlen: Genau schreiben wie es reproduzierbar ist, wenn irgendwie möglich. Ansonsten wird dein Jira-Eintrag vermutlich als nicht reproduzierbar geschlossen...

Der schöne Günther 12. Jun 2020 09:21

AW: Code mit AnsiString lief unter 10.0 Seattle, crasht unter 10.4 Sydney
 
Ja, du hast Recht. Das Merkwürdige:
Delphi-Quellcode:
var dateTime := GetTimeUTC( ParamStr(0) )
liefert bei mir auch keinen Fehler. Nehme ich aber stattdessen
Delphi-Quellcode:
var timestamp := DateTimeToStr( GetTimeUTC( ParamStr(0) ) );
kommt es zur AV. Allerspätestens hier endet mein Verständnis. Jetzt müssen die Profis ran.

Ich habe dem Report eine komplette .DPR angehangen (Direktlink)

samso 12. Jun 2020 09:26

AW: Code mit AnsiString lief unter 10.0 Seattle, crasht unter 10.4 Sydney
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1467123)
Ah danke, jetzt habe sogar ich das verstanden. Und ja, unter 10.4 Sydney sieht es nun anders aus.

Aus
Delphi-Quellcode:
@EmptyStringA[1]
wurde
Delphi-Quellcode:
Pointer(EmptyStringA)
. Vielen Dank. Ich konnte nichts finden weshalb das geändert worden ist. Außerdem spielen leere Strings hier ja keine Rolle. Wahrscheinlich hat sich noch mehr geändert.

Danke! Diese Änderung ist ja eher kosmetischer Natur.
Delphi-Quellcode:
@EmptyStringA[1]
und
Delphi-Quellcode:
Pointer(EmptyStringA)
erzeugt - solange die Strings nicht Zerobased sind - ja exakt den gleichen Assemblercode. Damit ist diese Fehlermöglichkeit raus.

Der schöne Günther 13. Jun 2020 06:24

AW: Code mit AnsiString lief unter 10.0 Seattle, crasht unter 10.4 Sydney
 
Die Ursache war übrigens eine ganz andere: Die Definition von
Delphi-Quellcode:
TLoadedImage
ist in 10.4 falsch, was dann dazu führte dass in den Bereich vom AnsiString reingeschrieben wurde.

(https://quality.embarcadero.com/browse/RSP-29567)


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:20 Uhr.
Seite 2 von 2     12   

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