Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi W1044 Bedenkliche Typumwandlung von AnsiString in PWideChar (https://www.delphipraxis.net/142824-w1044-bedenkliche-typumwandlung-von-ansistring-pwidechar.html)

quick 4. Nov 2009 11:59


W1044 Bedenkliche Typumwandlung von AnsiString in PWideChar
 
Hallo,

ich möchte einen AnsiString in einen PWideChar konvertieren. Unter Delphi 2007 sah der Code folgendermaßen aus:

Delphi-Quellcode:
function StringToWideChar_CodePage(const Source: AnsiString; Dest: PWideChar;
  DestSize: Integer): PWideChar;
begin
Dest[MultiByteToWideChar(CodePageForConversions, 0, PAnsiChar(Source), Length(Source),
Dest, DestSize - 1)] := #0;
Result := Dest;
end;
In der Hilfe von Delphi 2010 habe ich folgenden Hinweis gefunden:

Nach der Änderung zu Unicode wurde dieser Aufruf zur Unterstützung der Compilierung unter ANSI und Unicode geändert:

Delphi-Quellcode:
procedure TWideCharStrList.AddString(const S: string);
{$IFNDEF UNICODE}
var
  L, D: Integer;
{$ENDIF}
begin
{$IFDEF UNICODE}
  FList[FUsed] := StrNew(PWideChar(S));
{$ELSE}
  L := Length(S);
  D := (L + 1) * SizeOf(WideChar);
  FList[FUsed] := AllocMem(D);
  MultiByteToWideChar(0, 0, PAnsiChar(S), L, FList[FUsed], D);
{$ENDIF}
  Inc(FUsed);
end;
geändert habe ich die alte Version so:

Delphi-Quellcode:
Dest := StrNew(PWideChar(Source));
Dest[DestSize -1] := #0;
Result := Dest;
Der Compiler spuckt die Warnung: W1044 Bedenkliche Typumwandlung von AnsiString in PWideChar aus {Zeile ... StrNew(PWideChar(Source)) }, kann ich diese ignorieren bzw. wie kann man das besser machen ?

MarcoWarm 4. Nov 2009 12:07

Re: W1044 Bedenkliche Typumwandlung von AnsiString in PWideC
 
Hi

definiere deine Methode einfach so: AddString(const S: WideString);

Gruß
Marco

himitsu 4. Nov 2009 12:15

Re: W1044 Bedenkliche Typumwandlung von AnsiString in PWideC
 
Man könnte ja nun auch Fragen: Warum keine TStringList?

Delphi-Quellcode:
procedure TWideCharStrList.AddString(const S: string);
begin
  FList[FUsed] := StrNew(PWideChar(WideString(S)));
  Inc(FUsed);
end;
für Delphi vor D2009 benötigt man aber noch eine StrNew-Funktion für PWideChar,
da dort nur eine für PAnsiChar existiert


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:45 Uhr.

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