![]() |
PAnsiChar nach PWideChar (D2K9), wie geht das?
Hallo,
habe hier mit D2009 das 'kleine' Problem, das immer die Warnung W1057: Implizite String-Umwandlung von 'AnsiChar' zu 'string' ausgegeben wird. Beispiel:
Delphi-Quellcode:
Vorweg: Die Funktion macht das was sie soll, ich möchte nur die W1057 weg haben.
function GetString(Stream : TStream; Len : Word) : PWideChar;
var FN : PAnsiChar; begin FN := AnsiStrAlloc(succ(Len)); Stream.Read(FN1 , Len); Result := WideStrAlloc(succ(Len)); StrPCopy(Result, FN); // <- W1057 StrDispose(FN); end; Der Datentyp von FN kann nicht geändert werden! Irgend einer ein Tipp/Idee? Viele Grüße Alter Mann |
Re: PAnsiChar nach PWideChar (D2K9), wie geht das?
Zitat:
|
Re: PAnsiChar nach PWideChar (D2K9), wie geht das?
AnsiString <> WideString/UnicodeString geschiht automatisch
PAnsiChar <> PWideChar nicht, weil Delphi nicht einfach so Speicher reservieren kann, es ja nicht wissen kann, wie danach dieser Zeiger/Speicher verwaltet wird. Die Folge wären massieve Speicerlecks. StrPCopy will einen PWideString, aber FN ist ein AnsiChar.
Delphi-Quellcode:
Wenn Delphi da immernoch meckert aber PAnsiChar nach WideString sollte möglich sein, dann
StrPCopy(Result, WideString(FN));
Delphi-Quellcode:
StrPCopy(Result, WideString(AnsiString(FN)));
oder gleich so und einige Zwischenschritte einsparen
Delphi-Quellcode:
function GetString(Stream : TStream; Len : Word) : PWideChar;
var FN : AnsiString; begin SetLength(FN, Len); Stream.Read(@FN1[1] , Len); Result := WideStrAlloc(succ(Len)); StrPCopy(Result, WideString(FN)); end; |
Re: PAnsiChar nach PWideChar (D2K9), wie geht das?
Hi,
erst einmal Danke. Die Lösung scheint dies zu sein:
Delphi-Quellcode:
Mal schauen ob es sich in Praxis bewährt.
StrPCopy(Result, WideString(FN));
Viele Grüße |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:47 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