System::Object^ in std::string



  • Hallo zusammen,
    bin mir nicht sicher, in welchen Forenteil das nun gehört.
    Ich sitze gerade an einer Oberfläche und habe ein Problem mit der Typkonvertierung.
    Ich habe eine Liste aus Dateinamen in einer Listbox.
    Wenn ich ein Element aus meiner Listbox mit doppelklick auswähle, dann möchte ich es durch eine andere Datei ersetzen.
    Dabei soll der Dateiname der alten Datei wieder übernommen werden.
    Zunächste hatte ich, bei meiner Variablen s1, das Problem System::string^in std::string, das habe ich behoben bekommen.
    Nun habe ich bei s2 das Problem von System::Object^ in std::string.

    Hier mein Code:

    private: System::Void ListBox1_MouseDoubleClick(System::Object^  sender, System::Windows::Forms::MouseEventArgs^  e) 
    		 {
    		 openFileDialog1->FileName = "";
    		 openFileDialog1->ShowDialog();
    		 if(openFileDialog1->FileName != "")
    				 {
    //					 std::string s2 = marshal_as<std::string>(ListBox1->Items[ListBox1->SelectedIndex]);
    					 pin_ptr<unsigned char> qChars = GetAsciiString(openFileDialog1->FileName);
    					 std::string s1((char*)qChars);
    //					 pin_ptr<unsigned char> rChars = GetAsciiString(ListBox1->Items[ListBox1->SelectedIndex]);
    //					 std::string s2((char*)rChars);
    					 std::string s2 = (std::string)(ListBox1->Items[ListBox1->SelectedIndex]);
    					 if(!CopyFile((LPCTSTR)(char*)s1.c_str(), (LPCTSTR)(char*)s2.c_str(),true))
    					 MessageBox(0, //Besitzer des Fensters 0 = kein Besitzer 
    						TEXT("Fehler beim Kopieren der Datei"), //Text 
    						TEXT("ERROR"), //Überschrift 
    						MB_OKCANCEL | MB_ICONWARNING); //Buttons und Icons
    				}
    		}
    

    die Funktion zu s1 ist:

    interior_ptr<unsigned char> GetAsciiString(System::String ^s)
    {
        array<unsigned char> ^chars = System::Text::Encoding::ASCII->GetBytes(s);
        return &chars[0];
        // of course you'd want to do some error checking for string length, nulls, etc..
    }
    

    Vielen Dank!!!



  • als Ergänzung, marshal_as hat nicht funktioniert. Also bitte etwas anderes vorschlagen 🙂



  • Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (auch C++0x und C++11) in das Forum C++/CLI mit .NET verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Mische bitte kein Win32 mit C++/CLI!!!

    Verwende mitte System::IO::File::Copy!

    Du kannst kein Object in ein String umwandeln, maximal casten:

    String^str = static_cast<String^>(obj);
    

    Lies Dir auch bitte dies durch und verwende C#!!!
    http://blog.kalmbach-software.de/de/2010/03/05/ccli-und-winforms-macht-keinen-sinn/


Anmelden zum Antworten