Entwickler-Ecke
Programmierwerkzeuge - Compilerwarnung bei Stringübergabe
Metschu - Mi 09.11.11 15:11
Titel: Compilerwarnung bei Stringübergabe
Hallo zusammen!
Ich bin gerade dabei, meine Delphi 7PE Projekte auf Delphi XE2 zu übertragen.
Bei dem Compilieren der Projekte kommen dann immer die Warnungen:
[DCC Warnung] FormulareErstellenUnit.pas(511): W1057 Implizite String-Umwandlung von 'ShortString' zu 'string'
[DCC Warnung] FormulareErstellenUnit.pas(879): W1058 Implizite String-Umwandlung mit potenziellem Datenverlust von 'TFontName' zu 'ShortString'
[DCC Warnung] FormulareErstellenUnit.pas(881): W1058 Implizite String-Umwandlung mit potenziellem Datenverlust von 'string' zu 'ShortString'
[DCC Warnung] FormulareErstellenUnit.pas(886): W1058 Implizite String-Umwandlung mit potenziellem Datenverlust von 'TCaption' zu 'ShortString'
...
Aus Speicherplatzgründen habe ich immer die Variable "Shortstring" genommen.
Wenn ich jetzt die Variable "String[10]" nehme, hab ich das gleich Problem, da das ja auch ein Shortstring ist.
Bei "String" sind die Meldungen weg.
Gibt es eine Möglichkeit, dies zu unterdrücken bzw welche Variablen sind dafür geeignet?
Von der Funktion her ist alles in Ordnung, die Variablen größen sind alle passend für die Projekte, nur stören mich diese 50 Hinweise...
Gruß
Torsten
Gausi - Mi 09.11.11 15:52
Wieso nutzt du ShortString? Der Unterschied zwischen (Ansi)String und ShortString dürfte bei 3 Byte pro Variable liegen, wenn ich mich da nicht täusche. Wenn du derartig Speicher sparen musst, bist du bei einer komplexen Sprache wie Delphi wahrscheinlich eh falsch. ;-)
Seit Delphi 2009 nutzt die VCL nunmal nicht mehr AnsiString, sondern UnicodeString. Und nicht alles, was in einen UnicodeString reinpasst (z.B. in einer Caption), passt auch in einen Short- oder AnsiString rein.
Also: Nutze den Typ String. Oder füge in den Code die Umwandlungen explizit ein.
jaenicke - Mi 09.11.11 18:14
ShortString ist schon länger (seit Delphi 2 im Grunde) nur noch aus Kompatibilitätsgründen da und sollte nicht mehr verwendet werden. Durch die Umstellung auf Unicode merkt man es nur deutlicher. :mrgreen:
Metschu - Mi 09.11.11 18:41
Vielen Dank für die Infos!
Hatte mir nur in der Hilfe den "Speicherverbrauch" mal angeschaut und dann immer den für meine Zwecke kleinsten genommen.
Wollte eben Sparsam sein :?
Gruß
Torsten
Metschu - Do 17.11.11 19:01
Hab nun aber das nächste "Problem"...
Wenn ich ein tRecord speichern möchte und als Variable einen String definiere, kommt die Fehlermeldung:
"[DCC Fehler] Unit1.pas(37): E2155 Typ 'TZeile' benötigt Finalization - nicht im Dateityp erlaubt"
Begrenze ich dann die länge der String-Variable bekomme ich logischerweise bei der Zuweisung von einem Edit-Feld wieder die Warnung:
"[DCC Warnung] Unit1.pas(42): W1058 Implizite String-Umwandlung mit potenziellem Datenverlust von 'TCaption' zu 'ShortString'"
Welchen weg muss ich denn hierbei einschlagen?
jaenicke - Do 17.11.11 19:31
Metschu hat folgendes geschrieben : |
Wenn ich ein tRecord speichern möchte und als Variable einen String definiere, kommt die Fehlermeldung:
"[DCC Fehler] Unit1.pas(37): E2155 Typ 'TZeile' benötigt Finalization - nicht im Dateityp erlaubt" |
Wo hast du was definiert?
Metschu - Do 17.11.11 19:51
Dies hab ich mal zum Testen erstellt:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26:
| var Form1: TForm1;
Type TZeile=Record Test1:String[254]; Test2:String[100]; Test3:String[19]; Test4:pChar; End;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject); var zeile:TZeile; f1:File of TZeile; begin zeile.Test1:=Edit1.Text; zeile.Test2:=Edit1.Text; zeile.Test3:=Edit1.Text; zeile.Test4:=pChar(Edit1.Text); end; end. |
pChar Klappt übrigens, nur steht in der Hilfe ja, das es Unsicher in der Verarbeitung mit normalem String ist...
jaenicke - Do 17.11.11 22:20
Metschu hat folgendes geschrieben : |
|
Naja, dafür brauchst du einen Record mit einer festen Größe, da gehen normale Strings oder andere Pointer natürlich nicht. Aber wozu die Umstände? Nimm einfach einen TFileStream und schreibe die Daten direkt hinein. ;-)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!