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, 11: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
44.184 Beiträge
 
Delphi 12 Athens
 
#2

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

  Alt 22. Okt 2010, 12: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.
$2B or not $2B
  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, 12: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 12:20 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

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

  Alt 22. Okt 2010, 12: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.
$2B or not $2B
  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, 12: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, 14: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
44.184 Beiträge
 
Delphi 12 Athens
 
#7

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

  Alt 22. Okt 2010, 14: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.
$2B or not $2B

Geändert von himitsu (23. Okt 2010 um 07: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, 02: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, 20: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
44.184 Beiträge
 
Delphi 12 Athens
 
#10

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

  Alt 30. Nov 2011, 20: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.
$2B or not $2B

Geändert von himitsu (30. Nov 2011 um 20: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 19:31 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