LPSTR to Char



  • Hallo zusammen,

    ich möchte über die Kommandozeile (ausführen windows) die .exe datei des c++ programm mit 2 weiteren Parametern starten bzw. ausführen. Es soll im Grunde so aussehen:

    d:\pfad\test.exe 100 variablen.csv

    also zuerst wo die datei sich befindet, einen INT parameter und der Name, der initialisierungsdatei.

    Für mein Programm nutz ich eine int WINAPI WinMain mit folgender Struktur:

    int WINAPI WinMain(
      HINSTANCE hInstance,      // handle to current instance
      HINSTANCE hPrevInstance,  // handle to previous instance
      LPSTR lpCmdLine,          // command line
      int nCmdShow              // show state
    )
    

    soweit ich weis steht der zusatz, also die beiden Parameter "100 variablen.csv" in lpCmdLine.

    mit

    param = atoi(lpCmdLine);
    

    ist es mir bereits gelungen den ersten parameter, den Zahlenwert in einen INT-Wert zu wandeln und ihn in meinem Programm zu nutzen.

    Nun stellt sich mir noch die Frage wie ich den Dateinamen aus dem LPSTR lpCmdLine bekomm, um meinem Programm zu sagen, mit welcher Initialisieurngsdatei er die .exe ausführen soll.
    Sprich, dass ich "variable.csv" in einen extrastring bekomm.
    Eigentlich dachte ich, dass dies nicht so schwer sein kann, aber irgendwie hänge ich mich doch gerade daran auf.

    hab es bislang mit:

    char *pointer;
    pointer = strchr(lpCmdLine,';');
    

    versucht. Dabei soll die eingabe der kommandozeile allerdings so aussehen: "d:\pfad\test.exe 100;variablen.csv" (semikolon anstelle leerzeichen)
    Bislang ohne Erfolg.

    hat jemand ein paar Tips für mich?
    Danke im voraus!

    grüße



  • Hallo,

    CommandLineToArgvW könnte was für dich sein.



  • CommandLineToArgvW könnte was für dich sein.

    Der Eingangsparameter bei dieder Funktion ist vom Typ LPWSTR. Bei meinem Programm ist die lpCmdLine vom Typ LPSTR. Daher inkompatibel. 😞

    hat noch jemand einen Vorschlag?



  • Es will Unicode - also gib ihm Unicode ...



  • Scheppertreiber schrieb:

    Es will Unicode - also gib ihm Unicode ...

    sry, bin leider kein Programmierexperte. Hatte mal ein paar C Seminare. C++ ist absolutes neuland. mir fehlen mit sicherheit ein paar grundlagen.
    demzufolge brauch ich ein paar ausführlichere tipps.
    hab zwar unicode mal gehört.. aber direkt was anfangen kann ich damit nicht.



  • Ich verstehe überhaupt nicht dein Problem.

    std::istringstream stream(lpCmdLine);
            int ErsterIntParameter = *std::istream_iterator<int>(stream);
            std::string MeinDateiname = *std::istream_iterator<std::string>(stream);
    

    Aber ob das Unicode-konform ist weiss ich nicht (auch wenn das locker hingebogen werden kann 😉 ). Andererseits, ich sehe keinen Grund wieso dein Dateiname Sonderzeichen enthalten sollte... 😕



  • Sone schrieb:

    Ich verstehe überhaupt nicht dein Problem.

    std::istringstream stream(lpCmdLine);
            int ErsterIntParameter = *std::istream_iterator<int>(stream);
            std::string MeinDateiname = *std::istream_iterator<std::string>(stream);
    

    Aber ob das Unicode-konform ist weiss ich nicht (auch wenn das locker hingebogen werden kann 😉 ). Andererseits, ich sehe keinen Grund wieso dein Dateiname Sonderzeichen enthalten sollte... 😕

    👍 😉 danke... hat mich ne ganze ecke weiter gebracht!



  • Es geht auch einfacher mit:

    #include <cstdlib>
    
    ...
    std::cout << __argv[1] ;
    std::cout << __argv[2] ;
    ...
    

    Undokumentiert in der C-Runtime, aber schon lange ununterbrochen verfügbar.


Anmelden zum Antworten