GetDlgItemText()
-
Hallo,
ich habe mit dem BefehlGetDlgItemText(IDC_EDIT_TIME, m_edit_time)den Inhalt des Editfields IDC_EDIT_TIME in den CString m_edit_time (ist Membervariable und Public) geschrieben.
Jetzt möchte ich diesen Wert in eine Datei schreiben, leider bekomme ich nicht den eingegebenen Wert sondern offensichtlich eine Speicheradresse o.ä.
Die Datei erstelle ich mit
std::ofstream datei(file.c_str()); if(!datei) { AfxMessageBox("Fehler beim Schreiben der Datei"); } datei<<"Zeitintervall: "<<m_edit_time<<std::endl; datei.close();Tippe ich zum Beispiel 100 ins Feld, steht in der Datei 0042169C.
Was mach ich falsch? Ist da irgendein Denkfehler? Könnt ihr mir weiterhelfen?
Danke, mathias
-
m_edit_time ist vom Typ CString. Woher soll die STL wiessen was Du hier ausgeben möchtest?
Versuch es mal mit m_edit_time.GetString(), das ist ein TCHAR* den Du bekommst.
Anmerkung: Sollte das ganzein einem Unicode Programm passieren, dann musst Du den TCHAR* in einen char[] umwandeln.
-
GetDlgItemText() erwartet einen Pointer auf eine Stringvariable!
Folglich ist "0042169C" die Adresse auf diesen Pointer!
Höchstwahrscheinlich müßtest Du so schreiben:
[cpp]GetDlgItemText(IDC_EDIT_TIME, **&**m_edit_time)[/cpp]Habe "höchstwahrscheinlich" geschrieben, da ich nicht weiß wie Du den Member m_edit_time definiert hast.
Martin
-
Danke für die Antworten.
m_edit_time ist CString.
Lasse ich m_edit_time.GetString() kompilieren, heisst es dass GetString() kein Element von CString ist.Da m_edit_time offensichtlich ein Zeiger sein soll in der Funktion, kann ich ihn dereferenzieren:
datei<<"Zeitintervall: "<<*m_edit_time<<std::endl;Nun ist bei einstelligen Zahlen das Ergebnis korrekt, bei mehrstelligen Zahlen erscheint nur die erste Ziffer.
Also bei 123 steht in der Datei nur 1.
Wie bekomme ich das Problem in den Griff?
-
VC6 anscheinend.
Dann versuch es mal mit einem simplen cast:static_cast<TCHAR*>(m_edit_time)
-
Hallo Martin, hast recht, bin noch mit VC6 unterwegs.
Habs nochmal versucht, habe den CString in string gecastet mitstd::string time = m_edit_time.GetBuffer(0)Jetzt klappt auch die Ausgabe mit
datei<<time<<std::endl;Problem gelöst.
-
Dazu brauchst Du kein GetBuffer(0)!