[C++]string in system() oder ShellExecute()



  • Ahoi,
    ich habe folgendes Problem: ich möchte einen, via TCP empfangenen, string data mit
    data = System::Text::ASCIIEncoding::ASCII->GetString( bytes, 0, i );
    in system() oder Shellexecute() einfügen. Der string enthält ein command, z.B. <C:\\WINDOWS\\system32\\calc.exe> oder <cmd.exe /c ipconfig>. Das Problem ist, das mir der Compiler bei Verwendung von system(data) folgendes ausgibt:
    error C2664: 'system': Konvertierung des Parameters 1 von 'System::String ^' in 'const char *' nicht möglich

    jemand 'ne Idee zur Beseitigung des Problems?

    Gruss

    Caldeum



  • C++/CLI sogar?

    #include <msclr/marshal_cppstd.h>
    //...
    System::String ^foo = L"Blablabla...";
    std::string bar = msclr::interop::marshal_as<std::string>(foo);
    // und dann:
    system(bar.c_str());
    

    Oder so ähnlich. Hab gad keinen Compiler dabei xD

    MfG



  • hab leider die marshal_cppstd.h nicht ... ich guck ob ich die wo find

    achja: benutze Visual C++ 2008 in Windows Forms



  • Cladeum schrieb:

    hab leider die marshal_cppstd.h nicht ... ich guck ob ich die wo find

    achja: benutze Visual C++ 2008 in Windows Forms

    marshal_cppstd.h gibts eventuell nicht in der Express Edition. Aber kein Problem, es ist nur eine Hilfe, es gibt noch etwa ein Dutzend andere Wege. Mit der "alten" Marshal Klasse sieht es so aus:

    #include <iostream>
    
    using namespace std;
    using namespace System;
    using namespace System::Runtime::InteropServices;
    
    int main()
    {
        String ^foo = L"cmd";
        IntPtr cptr = Marshal::StringToHGlobalAnsi(foo);
        system(static_cast<const char *>(cptr.ToPointer()));
        Marshal::FreeHGlobal(cptr); // Nicht vergessen...
        return 0;
    }
    

    EDITEDIT: Im falschen Forum sind wir trotzdem :p

    MfG



  • mir ist mit deinem zweiten Quelltext grad nicht ganz klar wie ich dann den Inhalt von data in system() oder ShellExecute() einbetten soll.


Anmelden zum Antworten