Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   W 1057 Implizite String-Umwandlung Ansistring zu string (https://www.delphipraxis.net/159538-w-1057-implizite-string-umwandlung-ansistring-zu-string.html)

hanspeter 1. Apr 2011 08:42

Delphi-Version: XE

W 1057 Implizite String-Umwandlung Ansistring zu string
 
Hallo,

ich stelle gerade ein Projekt von D5 auf XE um.
Im rs232 Bereich muss ich hier mit Ansi-Strings arbeiten.

Delphi-Quellcode:
s : Ansistring;
s := '12';
d := HexToByte(s);
Hextobyte braucht einen Stringparameter, also kommt die o.g. Warnung.
Da es an dieser Stelle ungefährlich ist (?) kann ich statt Hextobyte(string(s)) auch die Warnung abschalten oder habe ich dann einen Nebeneffekt?
Und wo zum Teufel finde ich in der Hilfe eine Zusammenstellung der Compilerschalter um diese Warnung abzuschalten?

Gruß Peter

ChrisE 1. Apr 2011 09:02

AW: W 1057 Implizite String-Umwandlung Ansistring zu string
 
Hallo Peter,

ich kenne die Funktion
Delphi-Quellcode:
HexToByte
nicht. Gibt es hierfür vielleicht eine alternative? Wie ist
Delphi-Quellcode:
d
deklariert?

Delphi-Quellcode:
{$WARNINGS OFF} 
//hier kommt keine Warnung mehr
{$WARNINGS ON}
Gruß, Chris

GPRSNerd 1. Apr 2011 09:36

AW: W 1057 Implizite String-Umwandlung Ansistring zu string
 
Versuch es mal mit einem expliziten Typecast auf String:

Delphi-Quellcode:
d := HexToByte(string(s));

himitsu 1. Apr 2011 09:53

AW: W 1057 Implizite String-Umwandlung Ansistring zu string
 
Entweder du nutzt ein HexToByte, welches AnsiStrings als Parameter nutzt,
du castest es manuell
Delphi-Quellcode:
d := AnsiString(HexToByte(String(s)));
(genaueres können wir nicht sagen, da uns die Definition von HexToByte vorenthalten wurde)
oder eben einfach ignorieren.

In diesem Fall wird ja so oder zo umgewandelt,
entweder automatisch durch Delphi (wobei dieses eine Warnung ausgibt)
oder man castes es manuell, ohne eine Warnung zu erhalten.

Solange nur ASCII-Zeichen (#0..#127) im String sind, gibt es absolut keine Probleme, bei ANSI (#0..#255) sollte es hier auch nahezu problemlos laufen, da es ja nach Unicode und gleich wieder zurück umgewandelt wird.

hanspeter 1. Apr 2011 10:48

AW: W 1057 Implizite String-Umwandlung Ansistring zu string
 
Habt Ihr meine Frage eigentlich bis zum Ende gelesen?
Wie ein Typecast funktioniert habe ich bereits beschrieben. Und für Hextobyte kann man eine beliebige andere Funktion mit einem String-Parameter verwenden.

Meine Frage ist ob ein Typecast string(s) an vielen Stellen im Programm erfolgen sollte oder ob ein explizites Ausschalten dieser Warnung ausreichend ist, da ein impliziter Typecast an dieser Stelle keine Nebenwirkung haben sollte.
$Warn on/of ist nicht die Lösung. Ich suche in der Hilfe den Schalter um nur die Warnung W1057 ausschalten zu können.

Gruß Peter

GPRSNerd 1. Apr 2011 10:57

AW: W 1057 Implizite String-Umwandlung Ansistring zu string
 
Da du trotz Nachfrage die Deklaration von d und HexToByte nicht offenlegst, ist alles nur hellsehen wegen der Nebeneffekte...

In den Projektoptionen gibts mehrere Schalter "Implizite/Explizite String-Umwandlung (mit potentiellen Datenverlusten)" unter den Compilereinstellungen für Warnungen wegen der Stringcasts.

ChrisE 1. Apr 2011 11:01

AW: W 1057 Implizite String-Umwandlung Ansistring zu string
 
Hallo Peter,
Zitat:

Zitat von hanspeter (Beitrag 1092386)
Habt Ihr meine Frage eigentlich bis zum Ende gelesen?

Ich habe mich bemüht :-)
Zitat:

Zitat von hanspeter (Beitrag 1092362)
Hextobyte braucht einen Stringparameter, also kommt die o.g. Warnung.

Ziel von mir war es zu erfahren, ob man statt der Funktion eine andere verwenden kann, die ANSISTRINGS akzeptiert
damit:
Zitat:

Zitat von hanspeter (Beitrag 1092362)
Da es an dieser Stelle ungefährlich ist (?) kann ich statt Hextobyte(string(s)) auch die Warnung abschalten oder habe ich dann einen Nebeneffekt?

Durch suche einer Ansi-Funktion, die es ermöglicht Dein Ziel zu erreichen, ergeben sich alle Deine Fragen als gegenstandslos. Ich dachte, dass dies Dein Problem löst.
Zitat:

Zitat von hanspeter (Beitrag 1092386)
Meine Frage ist ob ein Typecast string(s) an vielen Stellen im Programm erfolgen sollte oder ob ein explizites Ausschalten dieser Warnung ausreichend ist, da ein impliziter Typecast an dieser Stelle keine Nebenwirkung haben sollte

Das ist in meinen Augen eine andere Frage, dazu kann ich leider nicht viel sagen außer, dass ich versuchen würde immer Funktionen zu verwenden, bei dehnen das nicht nötig ist - also die ANSI-Varianten - solange du dich im ANSI-Bereich bewegst. Gibt es die Varianten nicht, würde ich selber versuchen es ab zu schätzten ob der Typecast gefährlich ist. Dass kannst aber nur Du entscheiden, da nur du die Interna Deines Programms kennst.

Gruß, Chris

hanspeter 1. Apr 2011 12:12

AW: W 1057 Implizite String-Umwandlung Ansistring zu string
 
Vielen Dank für die tatkräftige und konstruktive Unterstützung.
Ich bin zwischenzeitlich fündig geworden.
Was ich gesucht habe ist die Compilerdirective

{$WARN EXPLICIT_STRING_CAST OFF}

Was in XE noch funktioniert strg + O + O , dann werden die eingestellten Direktiven in den Quellcode
übernommen und man kommt so an undokumentierte Schalter ran.

Und nein bei deinem impliziten Typcast von Ansistring auf string kommt es nicht zu Problemen, da Unicode und
Ascii Code in den ersten 128 oder 255 Byte gleich ist.

Peter

himitsu 1. Apr 2011 12:24

AW: W 1057 Implizite String-Umwandlung Ansistring zu string
 
Zitat:

da Unicode und Ascii Code in den ersten 128 oder 255 Byte gleich ist.
ersten 128 Zeichen (#0..#127)
die letzen 128 Zeichen (#128..#255) werden je nach ensprechender Codepage umkodiert.

ChrisE 4. Apr 2011 07:12

AW: W 1057 Implizite String-Umwandlung Ansistring zu string
 
OT:
Zitat:

Zitat von hanspeter (Beitrag 1092400)
Was in XE noch funktioniert strg + O + O , dann werden die eingestellten Direktiven in den Quellcode
übernommen und man kommt so an undokumentierte Schalter ran.

:shock:

Man, dass kannte ich noch gar nicht. THX - wieder was dazu gelernt :-)

Gruß, Chris


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:09 Uhr.
Seite 1 von 2  1 2      

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