Programm mit Parameter aufrufen



  • hallo zusammen,

    wie kann ich aus einem Programm ein anderes Programm mit Paramter aufrufen ?

    z.B.
    test1.cpp

    aufruf test2 mit Parameter

    test2.cpp

    mach was....
    und gibt ergebnis zurück

    vielen Dank vorab !!



  • Meinst du Programm oder Funktion?

    Wenn test2 ein eigenständiges Programm (inklusive main()) ist, kannst du es per system() oder OS-abhängige vergleichbare Funktionen (CreateProcess() o.ä.) aufrufen. Allerdings sind da die Möglichkeiten der Wertrückgabe etwas (hmm) beschränkt (main() gibt nur einen int-Wert zurück, den du mit etwas Glück auch erhältst).



  • Wenn du einen shell Befehlausführen bzw. ein anderes Programm aus einem Programm heraus ausführen möchtest, so funktioniert das mit "system(...)"

    Der Rückgabewert ist hier jedoch ausschließlich ein integer:

    std::string command = "mkdir -p \""+path+"\"";
    if(system(command.c_str())!=0) std::cout<<"hat funkioniert"<<std::endl;
    else                           std::cout<<"hat nicht funkioniert"<<std::endl;
    

    obiges klappt auch unter Linux.

    oder unter Windows speziell für Verzeichnisse:

    if( _mkdir(dir.c_str()) == -1) return false;
    


  • vielen Dank für die Antworten !!

    das Aufrufen klappt !!

    ich müsste aber einen float-Wert zurückgeben !!

    wie müsste dazu die die test2.cpp aussehen..

    Habe in test2.cpp nur eine main - Funktion, die dann wie gesagt, einen flaot-Wert zurückgeben soll ...

    Vielen dank und Gruss



  • Das geht gar nicht - main() darf nur int Werte zurückgeben (die dienen normalerweise als Fehlerstatus). Du könntest höchstens die test2.cpp als Bibliothek verwenden und in test1 einbinden - dann kannst du alle ihre Funktionen direkt aufrufen, wo du sie benötigst.

    Also nochmal zurück auf Anfang: Was hast du da für Programme? Und in welcher Art sollen sie zusammenarbeiten?



  • Es gäbe schon eine Möglichkeit:
    int und float sind beide meistens (noch) 32 bit groß. (beachte meistens & noch)
    daher könnte man den float-Wert zB in eine Union packen:

    union FloatIntUnion{
          int          i;
          float        f; };
    
    // test2.EXE aufrufen und den Wert lesen:
    FloatIntUnion x;
    x.i = system("test2 parameter");
    float wert = x.f;
    
    // das main-return in test2.CPP müsste dann so aussehen
    float wert = 5.0123f; // zB
    FloatIntUnion ret;
    ret.f = wert;
    return ret.i;
    

    Alternativ könnte man das auch mit nem Zeigermisbrauch lösen.
    Ein Problem, dass sofort auffällt ist, dass int nicht garantiert long ist.


Log in to reply