system(""); funktioniert nicht



  • Hallo Leute,
    Könnt ihr mir hier helfen?

    system("dir C:\\Users\\" + UserName + "\\Desktop\\mod_files");
    

    UserName:

    String^ UserName;
    

    So jetzt der Fehler:

    1>------ Erstellen gestartet: Projekt: Creeper's ModInstall, Konfiguration: Debug Win32 ------
    1>  Creeper's ModInstall.cpp
    1>c:\users\tim\documents\visual studio 2010\projects\creeper's modinstall\creeper's modinstall\Form1.h(288): error C2664: 'system': Konvertierung des Parameters 1 von 'System::String ^' in 'const char *' nicht möglich
    1>          Es ist kein benutzerdefinierter Konvertierungsoperator verfügbar, oder
    1>          Ein verwalteter Typ kann nicht in einen nicht verwalteten Typ umgewandelt werden
    ========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========
    

    So der Fehler ist anscheint, dass Der String "UserName" nicht in system("") rein kann, da er den Operator "^" besitzt. Aber wie kirege ich es hin, dass der UserName String^ bleiben kann und trotzdem in system(""); reinpasst?`????

    ich hoffe ihr versteht was ich meine 😃
    bitte helft mir 😞

    lg timtrucker



  • Das ist C++/CLI, kein C++ und hat mit WinAPI herzlich wenig zu tun. Verschieben, bitte.

    Abgesehen davon: Wenn du schon .NET benutzt kannst du auch gleich mit div. Klassen aus System::IO die Funktion von dir nachbauen. Und von system() ist eh immer abzuraten. Ganz besonders hier: Du mischst anscheinend Managed und Unmanaged Code ohne /clr:pure zu benutzen.

    Entscheide dich: Willst du C++ programmieren oder C++/CLI?
    Wenn du C++ programmieren willst, dann Programmiere C++ (und zwar ohne die system()-Scheiße!).
    Wenn du C++/CLI programmieren willst, dann programmiere in C# oder VB, denn C++/CLI ist nur als Interop gedacht und nicht als Primärsprache.



  • system() ist nicht C++/CLI.
    aber dein string ist C++/CLI.

    damit dein Programm funktioniert, mache es so:

    LPCSTR UserName;
    oder
    const char *UserName;

    wobei das erste und das zweite genau gleich ist.

    Irgendwo hier auf der Seite findest du aber einen Artikel warum system() nie eine Lösung ist!!



  • Abgesehen davon dass du offenbar C++/CLI benutzt (und dir dabei offenbar nicht so ganz sicher bist was du tust) und nicht C++ (warum auch immer): Wenn es C++ und WinAPI sein soll, ist das und das was du suchst.
    In jedem Fall: Vergiss system().

    In keinem Fall kannst du da irgendwo direkt System::Strings übergeben, weil das eben managed Kram ist. Wenn du wirklich meinst, das tun zu müssen: Stichwort Marshalling. Natürlich bietet das .NET Framework selbst auch direkt entsprechenden Möglichkeiten: http://msdn.microsoft.com/en-us/library/system.environment.getfolderpath.aspx. Dann stellt sich aber natürlich wieder unweigerlich die Frage, warum es überhaupt C++/CLI sein muss und nicht einfach gleich C# sein kann?


Anmelden zum Antworten