Erstamls bedanke ich mich bei Andy, hat mich schon weiter gebracht!
Leider bin ich wieder auf ein interessantes Verhalten gestossen. Um dieses zu demonstrierer habe ich mein Beispiel noch ein wenig abgeändert:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25:
| var FZeiger: Pointer;
procedure TForm1.Button1Click(Sender: TObject); var str: String; begin str := 'Test0'; GetMem(FZeiger, SizeOf(String)); System.Move(str, FZeiger^, SizeOf(String)); end;
procedure TForm1.Button2Click(Sender: TObject); var str: String; begin str := 'Test'+IntToStr(0); GetMem(FZeiger, SizeOf(String)); System.Move(str, FZeiger^, SizeOf(String)); end;
procedure TForm1.Button3Click(Sender: TObject); begin Showmessage(String(FTest^)); end; |
Clicke ich zuerst auf den Button1, dann auf den Button3, wird mir der String "Test0" ausgegeben. Clicke ich zuerst auf den Button2, dann auf den Button3, wird irgend ein undefinierter Wert angezeigt.
Beim Button2 verwende ich die Funktion "IntToStr", um die Varibale "str" zu initialisieren. Ich könnte auch eine beliebige andere Funktion mit einem String als Rückgabewert nehmen und es würde nicht funktionieren.
Was ist in diesem Fall der unterschied zwischen:
str := 'Test0';
und
str := 'Test'+IntToStr(0);
Ich badanke mich für eue Bemühungen!
Grüsse Dominic