Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi String zu PAnsiChar (https://www.delphipraxis.net/149446-string-zu-pansichar.html)

himitsu 21. Okt 2020 13:18

AW: String zu PAnsiChar
 
Zitat:

Delphi-Quellcode:
procedure AnsiStrToPWideChar(aStr: AnsiString; var pwChr: LPCWSTR);
var ws: WideString;
begin
  ws := aStr;
  pwChr := LPCWSTR(ws);
end;

Wozu soeine Funktion? Direkt der Cast reicht ja
In der Funktion gibt es die Variable ws.
Der zurückgegeben Zeiger zeigt auf diesen String und jener wird am Ende der Funktion natürlich freigegeben, womit der Pointer auf etwas zeigt, wo "nichts" mehr ist. (womöglich ist inzwischen sogar schon irgendwas Anderes dort)

Zitat:

Delphi-Quellcode:
move(wchr,ws,StrLen(pwChr));

Und hier wird der Speicher der Zeiger kopiert, anstatt des Inhalts, womit natürlich hinter der Variable alles kaputt gemacht wird, weil der Pointer nur 4 Byte groß ist. -> Buffer-Overflow

Außerdem wird hier nur die Hälfte der Bytes kopiert, da WideChar jeweils 2 Byte groß ist.



Sollen PChars "länger" bestehen, dann muß auch der referenzierte Speicher so lange existieren.
* man fummelt an der Referenzzählung der Strings rum
* oder man reserviert Speicher für die Chars, worauf der PChar dann zeigt (am ende natürlich wieder freigeben)

delphifan2004 21. Okt 2020 20:53

AW: String zu PAnsiChar
 
Ok! Danke @himitsu. Hab das jetzt auch mit Casting gemacht. Damit funktioniert es wie ich will. :bounce1::cheers:


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

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