Exe-Datei im Hintergrund ausführen
-
Nach deinem Beispiel meine ich natürlich die Variable lpszArgument
-
Dr. Doof schrieb:
lpCmdLine enthält den String aus dem Programmaufruf, sprich meine Parameterliste. Ich muss die Liste jetzt nur irgendwie zerteilen und meine Parameter rauspicken. Ist das soweit richtig?
jep
zerteilen
zb: mit http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore98/html/_crt_strtok.2c_.wcstok.2c_._mbstok.asp
oder ein std::string
http://cplus.kompf.de/artikel/strings.html
oder oder oder
-
Na Gott sei Dank. Wir kommen der Sache schon näher
.
-
Es gibt doch auch __argv[] und __argc.
Zumindest bei mir
-
Es gibt doch auch __argv[] und __argc
Und wie erklär ich das der WinMain? Bei mir klappt's nur mit dem vollständigen Aufruf, so wie er weiter oben steht.
-
Hmmm, was mache ich falsch?
Die Lösung zum "zerhacken" des Eingabestrings habe ich hier aus dem Forum. Bei mir sieht das dann so aus:
#include <fstream> #include <sstream> #include <iostream> #include <string> #include <cstdlib> #include <windows.h> using namespace std; struct argument{ string Pfad; string Kanalname; string AnzWerte; string Zielpfad; }; int WinMain(HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpstrArgument, int nSTyle) { stringstream wort; string getrennt; argument Argument; ofstream out("Argumente.txt"); wort << lpstrArgument; while(getline (wort, getrennt, ','));{ out<< getrennt << endl; //Argument.Pfad = getrennt; getline(wort, getrennt, ','); out<< getrennt << endl; //Argument.Kanalname = getrennt; getline(wort, getrennt, ','); out<< getrennt << endl; //Argument.AnzWerte = getrennt; getline(wort, getrennt, ','); //Argument.Zielpfad = getrennt; out<< getrennt << endl; } //und so weiter return 0; }
Für Testzecke lasse ich die Argumente in eine Textdatei schreiben (um zu prüfen, ob auch aklles richtig gelesen wird). Das Argument besteht aus mehreren Begriffen, die durch Komma getrennt sind. Komischwerweise erscheint aber immer nur der letzte Begriff (4 Mal hintereinander). Wieso findet mein Programm die ersten drei nicht? Eigentlich habe ich den Source Code nur aus einem Thread abgeschrieben und da hat es angeblich funktioniert.
Danke nochmal für die Hilfe.
Gruß, Jan
-
du überschreibst 'getrennt' ja auch jedesmal mit dem letzte wert:
... wort(lpstrArgument);
-
Aber hier http://www.c-plusplus.net/forum/viewtopic.php?t=66610&highlight=stringstream wird es doch genauso beschrieben, oder
?
Naja egal, hab's gerade mit strtok() hinbekommen. Sorry, dass du dich umsonst bemühen musstest. Trotzdem danke.
-
Dr. Doof schrieb:
while(getline (wort, getrennt, ','));{ out<< getrennt << endl;
Wahrscheinlich ist das Semikolon ";" vor der geschweiften Klammer "{" ein Syntaxfehler, und muss entfernt werden.
Dadurch wird die while-Schleife naemlich ohne Anweisungsblock ausgefuehrt. Der Block in geschweiften Klammern "{" ... "}" wird erst nach der Schleife ausgefuehrt.
-
Ups, stimmt! Du hast wahrscheinlich recht. Hab ich ganz übersehen.
-
Dr. Doof schrieb:
Es gibt doch auch __argv[] und __argc
Und wie erklär ich das der WinMain? Bei mir klappt's nur mit dem vollständigen Aufruf, so wie er weiter oben steht.
Einfach eingeben bei mir.
Also:
int WinMain(HINSTANCE, HINSTANCE, LPSTR, int) { if (__argc < 2) return 1; else { /*...*/ } }