EditControl auslesen und in char buf[] kopieren



  • Hallo,
    ich sitze jetzt schon seit längerem an dem Problem eine Textbox auszulesen.
    Am Schönsten wäre es wie folgt:

    char temp[100];
    CString cStr;
    this->UpdateData (true);
    
    this->GetDlgItem (IDC_EDIT)->GetDlgItemTextW( IDC_EDIT,(LPTSTR)temp,100);
    
      //Hier sind alte Lösungsvarianten:
     // WideCharToMultiByte( CP_ACP, 0,wTemp , -1,
     //    temp, 100, NULL, NULL );
    
     // long lLen = cStr.GetLength () + 1;
     // char* temp = new char [ lLen ];   
     // strncpy( temp, serialEdit.GetBuffer(0), lLen ); 
    
      //temp = (char*)(LPCSTR)cStr;
    

    Aber irgendwie funktioniert alles nicht so richtig.Eine Variante mit WideCharToMultiByte oder das Umkopieren eines CStrings.

    Könntet ihr mir weiterhelfen?
    Auch habe ich probiert eine Variable von dem EditControl zu erstellen.Das hat aber das Problem nur verschoben.

    Vielen Dank im Voraus!



  • CString cStr; 
    this->GetDlgItemText(IDC_EDIT, cStr);
    

    Damit hast Du den Text in einem CString.



  • Oder du legst dir eine Steuerelementvariable (Control-Variable) an und holst dir den Text mit GetWindowText().



  • Danke für die schnellen Antworten,
    aber wie bekomme ich das alles in mein char buf[100]

    Danach habe ich schon ausführlich gegoogelt,aber keine Version hat so richtig funktioniert.



  • Den CString-Inhalt kriegst du z.B. so in dein char-Array:

    CString cs="TestText";
      char s[100]={0};
      memcpy(s,cs.GetBuffer(),cs.GetLength());
    

    Dann musst du aber sicherstellen, dass im char-Array genug Platz ist, sonst kracht es! Du solltest dann vielleicht einfach soviel Speicher allozieren, wie gebraucht wird, z.B. so:

    CString cs="TestText";
      char *s;
      s=(char*)malloc((cs.GetLength()+1)*sizeof(char));
      memcpy(s,cs.GetBuffer(),cs.GetLength()+1);
      s[cs.GetLength()]=0;
    


  • Es funktioniert aber auch nicht.
    Es wird nur das erste Zeichen abgespeichert. Ich vermute es hängt mit WideChar zusammen. Das zweite Byte ist wohl irgendwie 0 und somit wird nur das 1.Zeichen des String abgespeichert.

    Ich nutze VS2008 vielleicht hat sich da was geändert.
    Es scheint wohl an der Option "unicode" oder "Multibyte" zu liegen oder?



  • VS 2008 definiert standardmäßig UNICODE, damit werden alle Strings als Unicode behandelt. Du musst entweder konvertieren (z.B. WideCharToMultiByte) oder gleich den Zeichensatz in den Projekteinstellungen auf "Nicht festgelegt" bzw. "Multibyte" stellen.



  • Ja und genau da liegt auch mein Problem. Einen CString in Char umwandeln mit MultiBytetoWideChar().



  • Und du kannst/willst nicht auf Unicode verzichten?



  • Ich kann nicht auf Unicode verzichten, da alles andere damit erstellt wurde und ich sonst nen Haufen Fehler bekomme.



  • Dann nimm doch für die Konvertierung einfach einen CStringA:

    CString cStr; 
    GetDlgItemText(IDC_EDIT, cStr);
    
    char szTemp[100];
    StringCchCopyA(szTemp, _countof(szTemp), CStringA(cStr));
    

Anmelden zum Antworten