std::string -> System::String



  • Hallo!

    Ich möchte einen std::string in einen System::String konvertieren.

    ...
    std::auto_ptr< sql::ResultSet > res(stmt->getResultSet());
    std::string ts = res->getString("aktivDatum").c_str();
    cout << "String: " << ts << endl;
    System::String^jahr_t = Convert::ToString(ts.c_str());
    ...
    

    Alternativ habe ich noch

    ...
    std::auto_ptr< sql::ResultSet > res(stmt->getResultSet());
    std::string ts = res->getString("aktivDatum").c_str(); // ts=2011-09-09 00:00:00
    cout << "String: " << ts << endl;
    System::String^jahr_t = gcnew String(ts.c_str());
    ...
    

    probiert. Jedoch ohne Erfolg, da folgender Fehler kommt:

    Unbehandelte Ausnahme: System.FormatException: Die Eingabezeichenfolge hat das f
    alsche Format.
    bei System.Number.StringToNumber(String str, NumberStyles options, NumberBuff
    er& number, NumberFormatInfo info, Boolean parseDecimal)
    bei System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo i
    nfo)

    Die Ausgabe des Strings auf die Konsole ist noch ok und bei der Konvertierung kommt die Ausnahme. Hat jemand eine Idee was ich machen kann?

    Gruß



  • Nimm einfach den Konstruktor von String, so müsste es gehen:

    char* cstr;
    
    std::string str ("text");
    
    cstr = new char [str.size()];
    strcpy (cstr, str.c_str());
    
    String^ managed_string = gcnew String(cstr);
    


  • Fehlt da nicht ein delete cstr? Und warum überhaupt?



  • Schoeniaw(koq) schrieb:

    Nimm einfach den Konstruktor von String, so müsste es gehen:

    char* cstr;
    
    std::string str ("text");
    
    cstr = new char [str.size()];
    strcpy (cstr, str.c_str());
    
    String^ managed_string = gcnew String(cstr);
    

    Das bewirkt leider gar nichts und das Problem bleibt das gleiche. Aus irgendwelchen Gründen wird versucht den String als Zahlen zu interpretieren. Aber warum?



  • Warum so kompliziert...

    std::string str("Hallo Welt"); 
      String ^strStd = gcnew String(str.c_str());
    

    Siehe auch:
    http://www.c-plusplus.net/forum/p1132980

    Wenn da immer noch nicht das richtige rauskommen solltest, hast Du ein anderes Problem und solltest es mit Debuggen versuchen...



  • Jochen Kalmbach schrieb:

    Warum so kompliziert...

    std::string str("Hallo Welt"); 
      String ^strStd = gcnew String(str.c_str());
    

    Siehe auch:
    http://www.c-plusplus.net/forum/p1132980

    Wenn da immer noch nicht das richtige rauskommen solltest, hast Du ein anderes Problem und solltest es mit Debuggen versuchen...

    kommt doch aufs gleiche raus...
    @hjdt: das ist korrekter code, es muss funktionieren. wenn nicht dann hast du ein anderes problem. bei welcher zeile tritt der error auf? bei der initialisierung des system::string?



  • Schoeniaw(koq) schrieb:

    kommt doch aufs gleiche raus...

    Der Weg ist das Ziel. Und in der Hinsicht ist Jochens Vorschlag definitiv besser.



  • Um das Thema abzuschliessen, es lag am MySQL-Connector und diese Version hatte einen Bug. Vielen Dank für die Hilfe!


Anmelden zum Antworten