Regioneinstellungen (Dezimaltrennzeichen) abfragen und ggf. für die Programmlaufzeit ändern (GELÖST!)
-
Hallo,
nach reichlicher Recherche muss ich nun doch selbst meine Frage hier loswerden. Ich hoffe es gibt eine Lösung.
Ich muss für ein älteres Projekt die Windows Systemeinstellungen abfragen und zwar das Dezimaltrennzeichen und das Tausender Trennzeichen. Dieses, sollte es nicht schon ein Punkt sein, möchte ich dann als Punkt setzen.Mit der einfachen globalen Variable
DecimalSeparator = '.';
funktioniert es nicht. Ich ernte ein "Expected expression"Mit folgendem Code:
TFormatSettings fmt;
fmt = TFormatSettings::Create(GetThreadLocale());
fmt.DecimalSeparator = '.';...bekomme ich die Fehlermeldung "expected unqualified-id"
Ich arbeite mit Embarcadero C++Builder 10.3
Was mache ich falsch?
-
-
@Karl-J sagte in Regioneinstellungen (Dezimaltrennzeichen) abfragen und ggf. für die Programmlaufzeit ändern:
FormatSettings.DecimalSeparator = '.';
Hallo Karl,
leider die gleiche Fehlermeldung baim Compilieren: "expected unqualified-id"
Merkwürdiger Fehler... finde keinen Ansatzpunkt.
VG, Matten
-
Relligionseinstellungen sind zutiefst subjektiv.
( = du bitte zeigen eine nachvollziehbare komplette Beißspiel )
-
@MartiMc1 sagte in Regioneinstellungen (Dezimaltrennzeichen) abfragen und ggf. für die Programmlaufzeit ändern:
Was mache ich falsch?
Du benutzt das RAD Studio von Embarcadero. Idera. Wem auch immer der Laden gerade gehört.
Beim mir (RAD Studio 10.1) funktioniert das hier tadellos:
#pragma hdrstop #pragma argsused #include <System.hpp> #include <System.SysUtils.hpp> int main() { FormatSettings.DecimalSeparator = L'@'; String s = FloatToStr( 123.456 ); // ist "123@456" }
Bei der Zeilefmt = TFormatSettings::Create(GetThreadLocale());
bin ich mir auch nicht sicher, ob du da nicht einen Zeiger zurückbekommst. Dann funktioniertfmt.DecimalSeparator
natürlich nicht.#pragma hdrstop #pragma argsused #include <Windows.h> #include <System.hpp> #include <System.SysUtils.hpp> int main() { TFormatSettings fmt = TFormatSettings::Create( ::GetThreadLocale() ); fmt.DecimalSeparator = L'@'; }
funktioniert auch. Hast du die richtigen Header inkludiert?
-
Hallo @DocShoe
Vielen Dank.
Beide Varianten funktionieren merkwürdigerweise in einem "leeren" neuen Projekt tadellos...
Sehr merkwürdig, dass sie in meinem Programm nicht laufen wollen.
Immer dieses "expected unqualified-id".
Die Compiler-Settings habe ich schon abgeglichen und die eingebundenen Header auch...
-
Ist
DecimalSeparator
bei deinem Projekt ein Makro (per#define
gesetzt)?
-
@Th69
nee, zumindest habe ich keine solche Definition gesetzt. Vielleicht innerhalb einer Header-Datei?
-
Dann teste doch mal mit
#undef DecimalSeparator DecimalSeparator = '.';
-
Dieser Beitrag wurde gelöscht!
-
@Th69 sagte in Regioneinstellungen (Dezimaltrennzeichen) abfragen und ggf. für die Programmlaufzeit ändern:
Dann teste doch mal mit
#undef DecimalSeparator DecimalSeparator = '.';
Genau das hat's gebracht!!
Vielen Dank für den Tip, nun läuft es wie gewünscht!
VG, Matten
-
Du solltest aber auch mal nach der Ursache schauen (evtl. ein schlecht gewählter Include-Guard o.ä?).