Parameter übergeben



  • Hi,

    wie kann ich meinem Programm Parameter beim aufruf der exe übergeben und diese im Programm auslesen.

    Sprich ich möchte meinem Programm (z.B. proggi.exe) den String "test"
    mitgeben.
    Rufe ich es dann mit:
    proggi test
    auf???

    Und wie lese ich den Wert in C++ wieder aus?

    Danke
    Robby



  • hat sich erledigt

    mit int argc bekomm ic hdie Anzahl Argumente
    und mit char *argv[] die Argumente selber...



  • doch nicht ganz gelöst...

    Ich will/muss in meinem Hauptprogramm ein anderes Exe-File aufrufen,
    dem einen Wert mitgeben. Dieses Unterprogramm gibt mir einem Wert zurück mit return.

    Wie kann ich
    a) dieses Unterprogramm starten?
    b) den return Wert im Hauptprogramm auslesen



  • Dazu eine Frage von mir:

    Willst du a.) Das Programm gleichzeitig neben deinem laufen lassen oder b.) Das Programm ausführen, und während es ausgeführt wird mit der Fortführung deines Programms warten?

    MfG SideWinder



  • Original erstellt von SideWinder:
    **Dazu eine Frage von mir:

    Willst du a.) Das Programm gleichzeitig neben deinem laufen lassen oder b.) Das Programm ausführen, und während es ausgeführt wird mit der Fortführung deines Programms warten?

    MfG SideWinder**

    b) wäre optimal...



  • Hmm...

    Eigentlich gibt dir ja system() für b.) und WinExec(), ShellExecute(), etc. für a.) ja nur zurück ob alles in Ordnung ist...keinen Wert (zumindest kenne ich keine Möglichkeit einen beliebigen Wert zurückzubekommen).

    Du könntest das Unterprogramm aber etwas in eine Datei schreiben lassen, dass dir das Hauptprogramm dann ausliest.

    ---

    Aber, egal wie: system("Pfad") öffnet eine Datei und wartet mit der weiteren Ausführung deines Programms bis das Programm beendet wurde. Sie ist unter C in der Headerdatei <stdlib.h> unter C++ in der Headerdatei <cstdlib> zu finden.

    Aber die einzig möglichen Rückgabewerte sind:

    E2BIG

    Argument list (which is system-dependent) is too big.

    ENOENT

    Command interpreter cannot be found.

    ENOEXEC

    Command-interpreter file has invalid format and is not executable.

    ENOMEM

    Not enough memory is available to execute command; or available memory has been corrupted; or invalid block exists, indicating that process making call was not allocated properly.

    MfG SideWinder



  • Original erstellt von SideWinder:
    **Hmm...

    Du könntest das Unterprogramm aber etwas in eine Datei schreiben lassen, dass dir das Hauptprogramm dann ausliest.

    **

    So hab ich das nun auch gemacht...danke...



  • Hallo,

    es gibt auch noch eine andere Möglichkeit dem aufrufenden Programm
    etwas zurückzugeben.

    Hier das Programm das vom untenstehenden aufgerufen wird.
    Es gibt den Wert 25 zurück.

    int main(int argc, char* argv[])
    {
        Sleep(5000);
    
        return 25;
    }
    

    Jetzt das Programm das das obere startet und den Rückgabewert
    entgegen nimmt.

    int main(int argc, char* argv[])
    {
        // Das Programm mit ShellExecuteEx starten...
        SHELLEXECUTEINFO ShellInfo;
    
        ShellInfo.cbSize = sizeof(ShellInfo);
        ShellInfo.lpFile = "C:\\GetExitCodeProcess_Test.exe";
        ShellInfo.lpDirectory = NULL;
        ShellInfo.lpParameters = NULL;
        ShellInfo.lpVerb = "open";
        ShellInfo.nShow = SW_SHOW;
        ShellInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
    
        BOOL bResult = ShellExecuteEx(&ShellInfo);
    
        // Warten bis das gestartete Programm seine Aufgaben
        // erledigt hat.
    
        WaitForSingleObject(ShellInfo.hProcess,INFINITE);
    
        unsigned long nResult = 0;
    
        // Jetzt den ExitCode des Programms holen.
        // In diesem Fall wird mit return 25 der ExitCode  zurückgegeben.
        // Der ExitCode ist der Wert der mit return 25 oder exit(25)
        // zurückgegeben wird.
    
        GetExitCodeProcess(ShellInfo.hProcess,&nResult);
    
        // nResult == 25
    
        bResult = CloseHandle(ShellInfo.hProcess);
    
        return 0;
    }
    


  • Das ist natürlich um einiges besser...

    MfG SideWinder


Anmelden zum Antworten