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
wxString::ToDouble liefert keine Rückgabe
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.
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.
...also ein klein wenig Quellcode für die Glaskugel:
liefert Müll in "zahl",
während
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?
Code: Alles auswählen
wxString str="0.5";
double zahl;
str.ToDouble(&zahl);
während
Code: Alles auswählen
wxString str="0,5";
double zahl;
str.ToDouble(&zahl);
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?
Nach einer Suche im großen Orakel (=Internet)
fand ich im wxWidgets-GTK-FAQ die Empfehlung,
folgende Funktion zum Programmstart auszuführen
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??
fand ich im wxWidgets-GTK-FAQ die Empfehlung,
folgende Funktion zum Programmstart auszuführen
Code: Alles auswählen
setlocale(LC_NUMERIC, "C");
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??