![]() |
Unsichere Typumwandlung bei TFormatSettings
Hallo,
seit neuestem warnt mich der Compiler vor einer unsicheren Typumwandlung, wenn ich FormatSettings benutze. Beispiel:
Delphi-Quellcode:
Warnhinweis:
function GetMonatText(aMonat:Integer; short:Bool=False):String;
begin if short then Result:=FormatSettings.ShortMonthNames[aMonat] else Result:=FormatSettings.LongMonthNames[aMonat]; end; [DCC Warnung] uDatumLight.pas(492): W1048 Unsichere Typumwandlung von 'string' nach 'TFormatSettings' Wenn ich folgendes mache, kommt keine Warnung!?
Delphi-Quellcode:
Das kann doch sicher nicht die Lösung des Problems sein.
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; Was läuft da schief? |
AW: Unsichere Typumwandlung bei TFormatSettings
Bist du sicher, dass der Warnhinweis bei diesem Code hier kommt? :shock:
Delphi-Quellcode:
Da wird doch nichts an FormatSettings zugewiesen, sondern nur gelesen... :gruebel:
function GetMonatText(aMonat:Integer; short:Bool=False):String;
begin if short then Result:=FormatSettings.ShortMonthNames[aMonat] else Result:=FormatSettings.LongMonthNames[aMonat]; end; |
AW: Unsichere Typumwandlung bei TFormatSettings
Zitat:
|
AW: Unsichere Typumwandlung bei TFormatSettings
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.. |
AW: Unsichere Typumwandlung bei TFormatSettings
Zitat:
Und nein, ich erzeuge keine Extrainstanz von Formatsettings und auch keine Varable oder ähnliches. Warum sollte ich auch? |
AW: Unsichere Typumwandlung bei TFormatSettings
Poste mal dein Beispielprojekt, bitte.
|
AW: Unsichere Typumwandlung bei TFormatSettings
Zitat:
|
AW: Unsichere Typumwandlung bei TFormatSettings
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. |
AW: Unsichere Typumwandlung bei TFormatSettings
Zitat:
|
AW: Unsichere Typumwandlung bei TFormatSettings
Hallo,
kann ich, bringt aber warscheinlich nichts. Hier mal einige Auszüge:
Delphi-Quellcode:
Das komische an der Sache ist, dass in einem anderen Projekt, dass auch auf (gemeinsame) Dateien dieses Projektes zugreift, die Warnung nicht erscheint.
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]); |
AW: Unsichere Typumwandlung bei TFormatSettings
Sieh es einfach als winzigen Bug im Compiler an.
Du könntest es ja mal im QC melden. |
AW: Unsichere Typumwandlung bei TFormatSettings
Der Bug sitzt eher vor dem Bildschirm. Wie ich ja bereits vorhin geschrieben habe, taucht das Problem bei einem anderen Projekt nicht auf.
Wahrscheinlich habe ich in den Millionen von Optionen irgenwo etwas falsches angekreuzt bzw. aktiviert. Den Unterschied habe ich bisher leider noch nicht gefunden. |
AW: Unsichere Typumwandlung bei TFormatSettings
Compilerfehler (also insgesamt Fehler im Compiler/Linker/Debugger) tauchen nicht immer auf.
Viele sind situationsabhängig. Oftmals ist es so, daß man nur irdentwo anders eine winzige Unbedeutende Sache zu ändern braucht, welche mit dem Problem nichtmal im Geringsten etwas zu tun hat, und urplötzlich funktioniert das Andere (oder andersrum und es funktioniert eben nicht mehr) Ich hatte es mal, daß ich davor nur eine Leerzeile reinmachen mußte und schon ging es, oder zwei Funktionen austauschen (die Eine vor die Andere verschieben). Was du machen kannst ist das Zurückbauen des Projekts. Also so lange alles andere ausbauen, bis es wieder funktioniert, oder bis am Ende möglichst nur noch die fehlerhafte Codestelle übrigbleibt. Wenn's geht, dann den Teil wieder reinmchen, prüfen ob's nun wieder Probleme gibt und wenn ja, dann eventuell was Anderes entfernen usw. Am Ende dann natürlich ab ins QC damit. |
AW: Unsichere Typumwandlung bei TFormatSettings
Zitat:
|
AW: Unsichere Typumwandlung bei TFormatSettings
Hallo,
ich habe den Grund für die "unsichere Typumwandlung" gefunden: Das Problem trat eigentlich nur bei von D7 nach XE2 portierten Programmen auf. Daraufhin habe ich die *.dproj mit einer neuen von XE2 erzeugten verglichen und bin dabei auf folgenden Eintrag gestossen:
Code:
Nachdem ich den Eintrag "<DCC_UNSAFE_CAST>" gelöscht habe, ist die unsinnige Compilerwarnung verschwunden.
<PropertyGroup Condition="'$(Base)'!=''">
... <DCC_UNSAFE_CAST>true</DCC_UNSAFE_CAST> <--- dieser Eintrag ist der Verursacher ... </PropertyGroup> Edit: Schade, zu früh gefreut. Das löschen des obigen Parameters hat nur zur Folge, dass die Ausgabewarnung "Unsichere Typumwandlung" von True auf False gesetzt wird. |
AW: Unsichere Typumwandlung bei TFormatSettings
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
|
AW: Unsichere Typumwandlung bei TFormatSettings
Zitat:
|
AW: Unsichere Typumwandlung bei TFormatSettings
Es mach m.E. wenig Sinn, irgendwelche Warnungen des Compilers abzuschalten, anstatt das eigentliche Problem zu lösen. Der Code, so wie wir ihn hier zu sehen bekommen, ist nämlich völlig korrekt und die Warnung sollte gar nicht erst kommen. Eventuell hilft es ja, die .local und .identcache Dateien zu löschen.
|
AW: Unsichere Typumwandlung bei TFormatSettings
Darum auch
Zitat:
|
AW: Unsichere Typumwandlung bei TFormatSettings
Zitat:
Zitat:
|
AW: Unsichere Typumwandlung bei TFormatSettings
Zitat:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:35 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz