oliver2104 hat geschrieben: Mi 13. Jan 2021, 13:26
scheitere aber schon bei den einfachsten Dingen.
PChar zählt eben schon an sich
nicht zu den einfachsten Dingen.
oliver2104 hat geschrieben: Mi 13. Jan 2021, 13:26
was mach ich da falsch ?
Du mischt Pascal Strings und Null terminierte Strings.
Du hast zwei Möglichkeiten das zu lösen.
Entweder, wenn der Pascal String für die Lebenszeit des PChars ebenfalls aktiv bleibt, dann kannst du einfach zu
PChar umcasten. Dein Beispiel wäre dann wie folgt:
Code: Alles auswählen
var
s: String;
p: PChar;
begin
s := IntToStr(42);
p := PChar(s); // nicht direkt den Funktionsaufruf hier reinmachen!
// solange "s" im Scope ist, ist "p" auch zugreifbar
end.
Andernfalls musst du umkopieren und dann auch den
PChar wieder selbst freigeben:
Code: Alles auswählen
var
s: String;
p: PChar;
begin
s := IntToStr(42);
p := PChar(GetMem(Length(s) + 1));
Move(s[1], p[0], Length(s) + 1); // dies kopiert das #0, das jeder AnsiString am Ende hat, mit
// nutze p
// ...
FreeMem(p);
end.