wxString::ToDouble liefert keine Rückgabe

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
WalGrom
Beiträge: 430
Registriert: 14.03.2005 12:21:08

wxString::ToDouble liefert keine Rückgabe

Beitrag von WalGrom » 25.07.2005 22:48:24

Hallo!

Hat hier jemand Erfahrung mit wxWidgets/wxWindows??

Ich hatte unter Woody eine Applikation,
die ich nun unter Sarge compiliert habe und dort
funktioniert sie nicht mehr korrekt.

Insbesondere macht die Funktion
wxString::ToDouble(double &Wert)
Probleme, da sie nur dann einen sinnvollen
Ausgabewert liefert, wenn ich mit gdb arbeite,
nicht aber, wenn die Applikation ohne Debugger arbeitet...

Ich habe keinen blassen Schimmer, woran es liegt.
Unter Woody lief alles problemlos - mit unveränderten
Quelltexten und wxWidgets 2.4.2

Danke für Tipps.
Stephan

Benutzeravatar
Joghurt
Beiträge: 5244
Registriert: 30.01.2003 15:27:31
Wohnort: Hamburg
Kontaktdaten:

Beitrag von Joghurt » 26.07.2005 01:19:03

Ohne Quellcode wird dir hier niemand helfen können, unsere Glaskugeln wurden letztes Jahr beim Umzug auf den neuen Server zerstört...

Dass die Funktion unter gdb läuft, sonst nicht (="Heisenbug") deutet auf irgendeinen Buffer-Overflow hin. Es kann sein, dass dein Code schon immer fehlerhaft war, aber das sich erst mit der neuen Version bemerkbar macht, wenn dort ein paar Abläufe verändert wurden.

Benutzeravatar
WalGrom
Beiträge: 430
Registriert: 14.03.2005 12:21:08

Beitrag von WalGrom » 26.07.2005 20:33:43

...also ein klein wenig Quellcode für die Glaskugel:

Code: Alles auswählen

  wxString str="0.5";
  double zahl;
  str.ToDouble(&zahl);
liefert Müll in "zahl",
während

Code: Alles auswählen

  wxString str="0,5";
  double zahl;
  str.ToDouble(&zahl);
Den korrekten Wert 0,5 in "zahl" liefert.

Jetzt habe ich also im KDE-Kontrollzentrum das
Dezimalkomma durch den Punkt ersetzt,
alles neu gestartet und sogar noch kompiliert und
das hat alles keine Auswirkung....

Wo kann ich das denn noch einstellen - evtl. sogar
im eigenen Programm - all so Scherze wie
das Tausender-Trennzeichen und das Dezimalkomma?

Benutzeravatar
WalGrom
Beiträge: 430
Registriert: 14.03.2005 12:21:08

Beitrag von WalGrom » 26.07.2005 20:52:28

Nach einer Suche im großen Orakel (=Internet)
fand ich im wxWidgets-GTK-FAQ die Empfehlung,
folgende Funktion zum Programmstart auszuführen

Code: Alles auswählen

  setlocale(LC_NUMERIC, "C");
weil sonst die Internationalisierungseinstellungen von
GTK bei der Wandlung zwischen Text und Zahlen angewendet werden...

So weit so gut, nur im wxWidgets Handbuch habe ich ewig danach gesucht,
wo man die LOCALES einstellen kann...
(Ob das Programm dann auch mal unter anderen OS funktionier???
Ich hab' da so meine Zweifel...)

EDIT: Wie setze ich die "LOCALES" denn möglichst OS-unabhängig??

Benutzeravatar
Joghurt
Beiträge: 5244
Registriert: 30.01.2003 15:27:31
Wohnort: Hamburg
Kontaktdaten:

Beitrag von Joghurt » 27.07.2005 00:00:53

Locales sind Unix-spezifisch, und dafür ist die angegebene Zeile ausreichend. Ob und wie man etwas unter Windows einstellen muss, weiss ich nicht.

Antworten