Wie erstellen/ausführen ein .exe von einem Programm? (C++)
Ist es möglich (und wenn ja, wie) schreiben Sie ein Programm in C++, die Parameter benötigt, führen Sie dieses Programm aus einem anderen C++ - Programm.
Sprich: kann ich eine Funktion erstellen, die addiert zwei zahlen:
int add(int a,int b){return a+b;}
Ist es möglich, das gleiche zu tun, außer anstelle der Funktion eine separate C++ .exe?
EDIT: Da eine Menge Leute nicht verstehen, meine Frage, ich werde versuchen zu sagen, was genau ich will wissen, wie zu tun ist.
Möchte ich ein Programm haben, nennen wir es "p1".
Möchte ich das Programm um zwei zahlen vom Benutzer:
int x,y;
cin>>x;
cin>>y;
Möchte ich nun erstellen Sie ein weiteres Programm, das zwei zahlen, und fügt Sie, auf die gleiche Weise eine Funktion hätte, außer einem separate Programm.
Dann möchte ich laufen das zweite Programm von das erste Programm mit den zahlen wurde es von dem Benutzer. Ie:
#include<iostream>
using namespace std;
int main()
{
int x,y;
cin>>x;
cin>>y;
add(x,y); //this is how I would call a function named "add". I want to know how to do that with a separate program instead of just a separate function.
return 0;
}
EDIT: ich habe herausgefunden, wie zu verwenden
(void)system("C:\\Program Files\\test.exe");
Wie würde ich dass Argumente übergeben werden, und wie könnte ich ein Programm schreiben, nimmt diese Argumente?
- Sie reden über das erstellen einer .dll und C++ - Funktionen aufrufen, die im inneren des .dll?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Auf den meisten Betriebssystemen können Sie Argumente übergeben, die in system() von Raum-Trenn Sie:
Dieser string kann natürlich aufgebaut werden, die von sprintf oder std::ostringstream oder was haben Sie.
Dann brauchen Sie nur um Ihre Argumente in dem anderen Programm:
Ich bin mir nicht ganz sicher, was Sie tun möchten, aber Sie können starten Sie apps in windows mehrere Möglichkeiten. Das übliche "windows" Weg, es zu tun ist:
Klingt es wie Sie wollen, nehmen Sie die argc-und argv-Werte aus der Quell-Anwendung, und verwenden Sie dann diese Werte als Parameter in die oben genannten Funktionen, zu Beginn Ihres zweiten Anwendung.
Können Sie die Kommunikation zwischen Prozessen gibt es mehrere Möglichkeiten, durch die Verwendung von pipes, sockets, Dateien, oder sogar das 2. Programm der return-code könnte genug sein.
Könnten Sie besser dran, das erstellen einer DLL zu laden, die von Ihrer ersten Anwendung. Die DLL würde alles tun, was Sie wollen und können wieder die Werte, die Sie direkt und ohne eine zusätzliche kommunikationsebene.
Ihre Frage ist ein wenig unklar.
Sind Sie zufällig auf der Suche nach etwas wie der system call? http://en.wikipedia.org/wiki/System_(C_standard_library)
Mit system aufrufen Sie können eine beliebige ausführbare Datei, und übergeben Sie eine beliebige Anzahl von command-line Argumente, um die ausführbare.
Yep, es gibt mehrere Möglichkeiten, wie sockets, pipes, rpc... http://en.wikipedia.org/wiki/Inter-process_communication
Nicht sicher, ich verstehe die Frage, aber können Sie Parameter hinzufügen, um eine C/C++ - Programm mit :
Ja, singinanarchist auf dem richtigen Weg war. Eine C++ - Konsolenanwendung beginnt mit dem Aufruf
main( int argc, char* argv[] )
akzeptiert zwei Argumente:argc
= argument count: Anzahl der input-Argumenteargv
= argument vector:char*
array von ArgumentenSo, wenn Sie kompilieren Sie Ihr Programm
prog.exe
, und wollen es alsDann
argc
ist 3, und das argument vectorargv
entsprichtIn denen Sie durchführen können, was Sie möchten, um die input-Argumente.
Dies ist eine windows-spezifische Lösung, aber Sie könnten in der Lage sein, um eine Funktion aufzurufen, die definiert wurden, in ein anderes ausführbares Programm. Das ist normalerweise die Aufgabe von DLLs, aber EXEs und DLLs sind beide das gleiche format sowieso (es gibt ein paar verschiedene Flaggen, aber Sie sind beide im Portable Executable (PE) format), so dass es funktionieren sollte. Sie hätten, so etwas zu tun:
caller.cpp:
angerufene.h:
callee.cpp:
Haftungsausschluss:
Referenzen:
LoadLibrary
GetProcAddress
Ein paar Dinge anzusprechen:
1) benutze Niemals system(). Es ist böse (nicht Plattform-unabhängig, Sicherheit, Fehler, etc). system() wird davon ausgegangen, dass der Ziel-computer über ein Kommando-interpreter, die es vielleicht nicht haben!
2) Wenn Sie möchten, verwenden Sie die system -, die dies tun (vorausgesetzt, Sie haben einen Vektor von Argumenten genannt args, der Prozess aufgerufen werden, ist in einem string namens proc)
Sie kompilieren könnte durch die Annahme, dass der Ziel-PC hat einen compiler (wieder unsicher), und die Berufung auf Sie (z.B. g++ source.cpp).
3) Rohre. Code-Beispiel: