AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Implizite String-Umwandlung von 'AnsiString' zu 'string'
Thema durchsuchen
Ansicht
Themen-Optionen

Implizite String-Umwandlung von 'AnsiString' zu 'string'

Ein Thema von pustekuchen · begonnen am 22. Okt 2010 · letzter Beitrag vom 30. Nov 2011
Antwort Antwort
Benutzerbild von pustekuchen
pustekuchen

Registriert seit: 27. Aug 2010
265 Beiträge
 
Delphi 11 Alexandria
 
#1

Implizite String-Umwandlung von 'AnsiString' zu 'string'

  Alt 22. Okt 2010, 10:29
Delphi-Version: 2010
Guten Tag,

Ich habe desöfteren in meinem Projekten folgende Warnung nach dem Compilen.

Beispiel:
mmoInfo.Lines.Add(dbInfo.DBFileName);
Code:
[DCC Warnung] XXX.pas(XX): W1057 Implizite String-Umwandlung von 'AnsiString' zu 'string'
Kann man diese Warnung getrost ignorieren und die String-Formatüberprüfung ausschalten?
Oder sollte ich die Zeile folgendermaßen umschreiben?
mmoInfo.Lines.Add(String(dbInfo.DBFileName));
Delphi programming is awesome.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.115 Beiträge
 
Delphi 12 Athens
 
#2

AW: Implizite String-Umwandlung von 'AnsiString' zu 'string'

  Alt 22. Okt 2010, 11:09
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:
Implizite String-Umwandlung von 'string' zu 'AnsiString'
Andersrum sollte man schon eher aufpassen, denn nicht jedes Unicodezeichen paßt in eine ANSI-Kodierung rein, weswegen dort Informationen verloren gehen können.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#3

AW: Implizite String-Umwandlung von 'AnsiString' zu 'string'

  Alt 22. Okt 2010, 11:15
Warnungen abschalten mache ich persönlich ungerne, manchmal ist auch nur eine Warnung ganz hilfreich.

Man kann aus der Umwandlung eine explizite machen:
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

Geändert von Satty67 (22. Okt 2010 um 11:20 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.115 Beiträge
 
Delphi 12 Athens
 
#4

AW: Implizite String-Umwandlung von 'AnsiString' zu 'string'

  Alt 22. Okt 2010, 11:19
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von pustekuchen
pustekuchen

Registriert seit: 27. Aug 2010
265 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Implizite String-Umwandlung von 'AnsiString' zu 'string'

  Alt 22. Okt 2010, 11:30
Okay gut zu wissen

Dann lass ich die Überprüfung Sicherheitshalber an und Ignoriere die Nachrichten
Delphi programming is awesome.
  Mit Zitat antworten Zitat
Benutzerbild von Assarbad
Assarbad

Registriert seit: 8. Okt 2010
Ort: Frankfurt am Main
1.234 Beiträge
 
#6

AW: Implizite String-Umwandlung von 'AnsiString' zu 'string'

  Alt 22. Okt 2010, 13:19
Aber diese Meldung kannst du auch einfach ignorieren.
ANSI paßt in Unicode rein.
Säääähkunde! ANSI hat noch immer verschiedene Codeseiten. Und auch wenn jede einzelne locker in Unicode reinpaßt, ist die Warnung dazu da dich darauf hinzuweisen daß bspw. bei Umlauten, ß oder anderen seltsamen Zeichen (kyrillisch, chinesisch) die Umwandlung eventuell nicht wie gewollt stattfindet. Am Ende weiß immernoch der Programmierer am besten welche Codeseite die korrekte ist.
Oliver
"... aber vertrauen Sie uns, die Physik stimmt." (Prof. Harald Lesch)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.115 Beiträge
 
Delphi 12 Athens
 
#7

AW: Implizite String-Umwandlung von 'AnsiString' zu 'string'

  Alt 22. Okt 2010, 13:23
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.
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (23. Okt 2010 um 06:55 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Assarbad
Assarbad

Registriert seit: 8. Okt 2010
Ort: Frankfurt am Main
1.234 Beiträge
 
#8

AW: Implizite String-Umwandlung von 'AnsiString' zu 'string'

  Alt 23. Okt 2010, 01:55
PS: Ob es nun implizit oder explizit, via String(...), umgewandelt wird, daß macht keinen Unterschied.
Point taken
Oliver
"... aber vertrauen Sie uns, die Physik stimmt." (Prof. Harald Lesch)
  Mit Zitat antworten Zitat
Micha88
(Gast)

n/a Beiträge
 
#9

AW: Implizite String-Umwandlung von 'AnsiString' zu 'string'

  Alt 30. Nov 2011, 19:31
Was genau bedeutet das eigentlich, aus einer impliziten eine explizite Umwandlung zu machen?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.115 Beiträge
 
Delphi 12 Athens
 
#10

AW: Implizite String-Umwandlung von 'AnsiString' zu 'string'

  Alt 30. Nov 2011, 19:40
Delphi-Quellcode:
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);
Eventuell auch mal in Wiki die Artikel zum Implizit und Explizit durchlesen.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (30. Nov 2011 um 19:43 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:39 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