AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Die Delphi-IDE Unsichere Typumwandlung bei TFormatSettings
Thema durchsuchen
Ansicht
Themen-Optionen

Unsichere Typumwandlung bei TFormatSettings

Ein Thema von Gollum · begonnen am 24. Aug 2012 · letzter Beitrag vom 4. Sep 2012
Antwort Antwort
Seite 1 von 3  1 23      
Benutzerbild von Gollum
Gollum

Registriert seit: 14. Jan 2003
Ort: Boxberg
456 Beiträge
 
Delphi 10.1 Berlin Professional
 
#1

Unsichere Typumwandlung bei TFormatSettings

  Alt 24. Aug 2012, 08:50
Hallo,

seit neuestem warnt mich der Compiler vor einer unsicheren Typumwandlung, wenn ich FormatSettings benutze.


Beispiel:
Delphi-Quellcode:
function GetMonatText(aMonat:Integer; short:Bool=False):String;
begin
  if short then Result:=FormatSettings.ShortMonthNames[aMonat]
    else Result:=FormatSettings.LongMonthNames[aMonat];
end;
Warnhinweis:
[DCC Warnung] uDatumLight.pas(492): W1048 Unsichere Typumwandlung von 'string' nach 'TFormatSettings'


Wenn ich folgendes mache, kommt keine Warnung!?
Delphi-Quellcode:
function GetMonatText(aMonat:Integer; short:Bool=False):String;
var fms:TFormatSettings;
begin
  fms:=TFormatSettings.Create;
  if short then Result:=fms.ShortMonthNames[aMonat]
    else Result:=fms.LongMonthNames[aMonat];
end;
Das kann doch sicher nicht die Lösung des Problems sein.
Was läuft da schief?
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#2

AW: Unsichere Typumwandlung bei TFormatSettings

  Alt 24. Aug 2012, 10:14
Bist du sicher, dass der Warnhinweis bei diesem Code hier kommt?
Delphi-Quellcode:
function GetMonatText(aMonat:Integer; short:Bool=False):String;
begin
  if short then Result:=FormatSettings.ShortMonthNames[aMonat]
    else Result:=FormatSettings.LongMonthNames[aMonat];
end;
Da wird doch nichts an FormatSettings zugewiesen, sondern nur gelesen...
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von Gollum
Gollum

Registriert seit: 14. Jan 2003
Ort: Boxberg
456 Beiträge
 
Delphi 10.1 Berlin Professional
 
#3

AW: Unsichere Typumwandlung bei TFormatSettings

  Alt 24. Aug 2012, 10:30
Zitat:
Bist du sicher, dass der Warnhinweis bei diesem Code hier kommt?
Zu 100%. Nicht nur an dieser Stelle, sondern an allen Stellen, an denen ich Formatsettings benutze.
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#4

AW: Unsichere Typumwandlung bei TFormatSettings

  Alt 24. Aug 2012, 10:41
Hm, also bei mir klappt es. Habe es gerade mal bei mir getestet (auch XE2) und alles passt.

Erzeugst du irgendwo neue Instanzen von TFormatSettings? Hast du irgendwo eine Variable namens FormatSettings vom Typ string? Seltsam ists schon..
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von Gollum
Gollum

Registriert seit: 14. Jan 2003
Ort: Boxberg
456 Beiträge
 
Delphi 10.1 Berlin Professional
 
#5

AW: Unsichere Typumwandlung bei TFormatSettings

  Alt 24. Aug 2012, 10:48
Zitat:
Erzeugst du irgendwo neue Instanzen von TFormatSettings? Hast du irgendwo eine Variable namens FormatSettings vom Typ string? Seltsam ists schon..
Das dieses Verhalten seltsam ist, da gebe ich Dir Recht.
Und nein, ich erzeuge keine Extrainstanz von Formatsettings und auch keine Varable oder ähnliches.
Warum sollte ich auch?
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#6

AW: Unsichere Typumwandlung bei TFormatSettings

  Alt 24. Aug 2012, 11:30
Poste mal dein Beispielprojekt, bitte.
  Mit Zitat antworten Zitat
Benutzerbild von Gollum
Gollum

Registriert seit: 14. Jan 2003
Ort: Boxberg
456 Beiträge
 
Delphi 10.1 Berlin Professional
 
#7

AW: Unsichere Typumwandlung bei TFormatSettings

  Alt 24. Aug 2012, 11:49
Zitat von Furtbichler:
Poste mal dein Beispielprojekt, bitte.
Geht leider nicht. Zum Einen ist das Projekt zu komplex (incl. Datenbankanbindung) und zum Anderen hat mein Arbeitgeber etwas dagegen.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Unsichere Typumwandlung bei TFormatSettings

  Alt 24. Aug 2012, 12:10
Wenn man sich anguckt, wie die globale "Instanz" dieses Records deklariert ist...
Eigentlich sollte es nicht, aber da kann der Compilier schonmal durcheinander kommen.

Zum Glück ist es bei dir nur eine Warnung, denn eigentlich würde soeine Zuweisung, von derartig inkompatiblen Typen, in einem Error enden und den Kompilierungsvorgang abbrechen.

Hier (XE2 ohne Updates) wird aber auch nicht gemeckert.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#9

AW: Unsichere Typumwandlung bei TFormatSettings

  Alt 24. Aug 2012, 12:26
Zitat von Furtbichler:
Poste mal dein Beispielprojekt, bitte.
Geht leider nicht. Zum Einen ist das Projekt zu komplex (incl. Datenbankanbindung) und zum Anderen hat mein Arbeitgeber etwas dagegen.
Kannst du dann wenigstens alle relevanten Stellen posten, die mit FormatSettings zu tun haben!?
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von Gollum
Gollum

Registriert seit: 14. Jan 2003
Ort: Boxberg
456 Beiträge
 
Delphi 10.1 Berlin Professional
 
#10

AW: Unsichere Typumwandlung bei TFormatSettings

  Alt 24. Aug 2012, 12:34
Hallo,

kann ich, bringt aber warscheinlich nichts.

Hier mal einige Auszüge:
Delphi-Quellcode:
  if CharInSet(Text[i], ['0'..'9', '-', '+', FormatSettings.DecimalSeparator]) then
  ...
  ...
  if short then Result:=FormatSettings.ShortDayNames[aTag]
    else Result:=FormatSettings.LongDayNames[aTag]
  ...
  ...
  for i:=1 to 12 do cbbMonat.Items.Add(FormatSettings.LongMonthNames[i]);
Das komische an der Sache ist, dass in einem anderen Projekt, dass auch auf (gemeinsame) Dateien dieses Projektes zugreift, die Warnung nicht erscheint.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 00:43 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