![]() |
Delphi-Version: 2010
Implizite String-Umwandlung von 'AnsiString' zu 'string'
Guten Tag,
Ich habe desöfteren in meinem Projekten folgende Warnung nach dem Compilen. Beispiel:
Delphi-Quellcode:
mmoInfo.Lines.Add(dbInfo.DBFileName);
Code:
Kann man diese Warnung getrost ignorieren und die String-Formatüberprüfung ausschalten?
[DCC Warnung] XXX.pas(XX): W1057 Implizite String-Umwandlung von 'AnsiString' zu 'string'
Oder sollte ich die Zeile folgendermaßen umschreiben?
Delphi-Quellcode:
mmoInfo.Lines.Add(String(dbInfo.DBFileName));
|
AW: Implizite String-Umwandlung von 'AnsiString' zu 'string'
An deinem Beispiel fehlt der Hinweis, daß DBFileName wohl ein AnsiString ist.
Aber diese Meldung kannst du auch einfach ignorieren. ANSI paßt in Unicode rein. Zitat:
|
AW: Implizite String-Umwandlung von 'AnsiString' zu 'string'
Warnungen abschalten mache ich persönlich ungerne, manchmal ist auch nur eine Warnung ganz hilfreich.
Man kann aus der Umwandlung eine explizite machen:
Delphi-Quellcode:
.
mmoInfo.Lines.Add(String(dbInfo.DBFileName));
dann sollte die Warnung eigentlich auch verschwinden, oder? *** implizite Umwandlung: versteckte oder durch Programmier-Code nicht direkt angegebene Umwandlung explizite Umwandlung: direkt sichtbare oder forcierte/gewollte Umwandlung |
AW: Implizite String-Umwandlung von 'AnsiString' zu 'string'
Ja, explizite Umwandlungen werden nicht bemängelt.
Wobei ich mich zuerst mal an DBFileName wenden würde ... man könnte ja mal schauen, ob sich dieses nach String/UnicodeString umdeklarieren läßt. |
AW: Implizite String-Umwandlung von 'AnsiString' zu 'string'
Okay gut zu wissen ;)
Dann lass ich die Überprüfung Sicherheitshalber an und Ignoriere die Nachrichten ;) |
AW: Implizite String-Umwandlung von 'AnsiString' zu 'string'
Zitat:
|
AW: Implizite String-Umwandlung von 'AnsiString' zu 'string'
Wenn man dieses bescheuerte Encoding-Word (die Codepage) im D2009+-String ordentlich gesetzt hat, dann gibt es keine Probleme, bei einer automatischen Umwandlung.
Und dieses setzen natürlich alle ordentlich auf die nötige codepage, wenn diese sich von der Standard-Codepage unterscheidet. :roll: PS: Ob es nun implizit oder explizit, via String(...), umgewandelt wird, daß macht keinen Unterschied. OK, wer weiß was eine Codepage ist und bewußt eine Andere nutzt, der wird dieses auch ordentlich behandeln. Aber genau deswegen würde ich diese Meldung belassen. So vergißt man es nicht und kann sich notfalls auch mal gezielt um das Problem kümmern. > doch explizit umwandeln, wenn man sich sicher ist, daß es so OK ist > manuell umwandeln (z.B. über TEncoding) > doch die Stringvariable auf Unicode erweitern > oder das Ziel auf ANSI beschränken Wobei Letzeres hier nix bringt, da 'ne StringList, bzw. das Memo sowieso kein ANSI mögen. |
AW: Implizite String-Umwandlung von 'AnsiString' zu 'string'
Zitat:
|
AW: Implizite String-Umwandlung von 'AnsiString' zu 'string'
Was genau bedeutet das eigentlich, aus einer impliziten eine explizite Umwandlung zu machen?
|
AW: Implizite String-Umwandlung von 'AnsiString' zu 'string'
Delphi-Quellcode:
Eventuell auch mal in Wiki die Artikel zum Implizit und Explizit durchlesen.
var
W: WideString; A: AnsiString; I: Integer; C: Cardinal; // implizit (unbeabsichtigt/automatisch) W := A; L := I; // explizit (absichtlich/manuell) W := WideString(A); C := Cardinal(I); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:33 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