![]() |
const String als Parameter
Hallo Zusammen,
vielleicht hat ja jemand eine Erklärung, warum es unterschiede in Delphi XE3 und Delphi XE8 bei der Verwendung von konstanten String Parameter gibt. Folgendes Code-Beispiel funktioniert unter XE3 und löst unter XE8 eine EInvalidPointer-Exception aus.
Delphi-Quellcode:
Es ist natürlich klar, dass der Pointer von 'FTest' durch die Zuweisung in 'MachWas' geändert wird, mich irritiert nur das unterschiedliche Verhalten bei gleichen Compiler-Einstellungen
procedure TForm1.Button1Click(Sender: TObject);
begin FTest := 'Ich bin ein Test'; MachWas(FTest); ShowMessage(FTest); // Ausgabe 'Ich bin ein Test hurz' nur bei XE3 wegen der u.g. Exception end; procedure TForm1.MachWas(const aString: String); begin FTest := aString + ' hurz'; ShowMessage(aString); // Exception in Delphi XE8 und unter XE3 erscheint die MessageBox mit 'Ich bin ein Test' end; |
AW: const String als Parameter
Du bist sicher, daß das unter XE3 funktioniert?
Von D7 bis XE gibt das auf jeden Fall Ärger! Gruß K-H |
AW: const String als Parameter
Unter D2007 funktioniert's bei mir wie für XE3 beschrieben, also 2 MessageBoxen ohne Exception. In der Zeile
Delphi-Quellcode:
ändert sich Pointer(FTest), während Pointer(AString) gleich bleibt. Scheinbar wurde in LStrCat3 (was laut CPU-Ansicht aufgerufen wird) Parameter-Aliassing (oder wie das jetzt heißt) berücksichtigt. Vielleicht ist das der großen Unicode-Transmogrifikation zum Opfer gefallen... aber, wenn's beim OP unter XE3 auch läuft, eher nicht.
FTest := aString + ' hurz';
Edit: Unter XE6 funzt's auch. |
AW: const String als Parameter
Könntest du kurz erklären warum das nicht funktioniert? Unter XE4 bekomme ich keine Exception, aber eine MessageBox ohne Inhalt.
|
AW: const String als Parameter
Ich bekomme unter D10 auch eine Exception und den Text in "Schriftzeichen" angezeigt...
Fehler liegt aber scheinbar im Sendmessage den ein:
Delphi-Quellcode:
Gibt keine Exception und bringt die erwarteten Texte...
procedure TForm108.Button1Click(Sender: TObject);
begin FTest := 'Ich bin ein Test'; MachWas(FTest); Memo1.Lines.Add(FTest); // ShowMessage(FTest); // Ausgabe 'Ich bin ein Test hurz' nur bei XE3 wegen der u.g. Exception end; procedure TForm108.MachWas(const aString: String); begin FTest := aString + ' hurz'; Memo1.Lines.Add(Ftest); // ShowMessage(aString); // Exception in Delphi XE8 und unter XE3 erscheint die MessageBox mit 'Ich bin ein Test' end; |
AW: const String als Parameter
@Mavarik
Du hast in dein Memo "Ftest" reingepackt und nicht "aString". Stürzt des ab, wenn du aString verwendest? Zitat:
Delphi-Quellcode:
PS: Ja ich bin sicher, dass es unter XE3 funktioniert
Memo1.Lines.Add(aString);
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:11 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