Programm mit Parameter aufrufen
-
hallo zusammen,
wie kann ich aus einem Programm ein anderes Programm mit Paramter aufrufen ?
z.B.
test1.cppaufruf test2 mit Parameter
test2.cpp
mach was....
und gibt ergebnis zurückvielen 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.