Programm mit Parametern aus der Kommandozeile starten
-
Hallo Zusammen,
kann mir jemand sagen wie ich ein unter Visual C++ (VS 2008) geschriebenes Programm mit verschiedenen Parametern aus der Kommandozeile aus starten kann.
Im Stil wie z.B. xcopy. Wenn ich xcopy mit /? starte, bekomme ich alle Parameter zurück die möglich sind. Ich kann das Programm jedoch auch mit verschieden Parametern starten. (Mit 2,3,4,5…. so wie ich lustig bin).
Mein Beispiel-Testprogramm:
Text.exe –i (integer übergeben) –s (CString übergeben)
Beim nächsten Start wird jedoch nur ein Integer übergeben.
Text.exe –i (integer übergeben)
Ich bin wohl schon über die
int main(int argc, char **argv)
– Funktion gestolpert, jedoch wird hier doch keine Zuordnung gemacht, dass bei –i der Integer Wert folgt und bei -s z.B. der CString …oder ?
Wäre für ein kleines Beispiel oder einen hilfreichen Link sehr erfreut
Dank und Gruß
gorbo
-
das was du an eine exe an parametern übergibst ist immer ein String bzw. wird als solcher behandelt.
die parameter in der funktion
int main(int argc, char **argv)
int argc gibt an wieviel argumente übergeben wurde bzw. wie groß der bereich des nächsten argumentes ist.
char **argv ist ein string bereich der die übergebenen argumente beinhaltet.
wie du das auseinanderklabüsterst ist dein problem.
Parameterübergabe an exe:
-i=5 -s=Blub -x=0xa35f
argc = 2
argv[0] = -i=5
argv[1] = -s=Blub
argv[2] = -x=0xa35f
-
20:39:06 20.08.2009 Titel: Zitieren
das was du an eine exe an parametern übergibst ist immer ein String bzw. wird als solcher behandelt.die parameter in der funktion
Code:
int main(int argc, char **argv)
Code:
int main(int argc, char **argv)
Code:
int main(int argc, char **argv)int argc gibt an wieviel argumente übergeben wurde bzw. wie groß der bereich des nächsten argumentes ist.
char **argv ist ein string bereich der die übergebenen argumente beinhaltet.
wie du das auseinanderklabüsterst ist dein problem.
Parameterübergabe an exe:
-i=5 -s=Blub -x=0xa35f
argc = 2
argv[0] = -i=5
argv[1] = -s=Blub
argv[2] = -x=0xa35f
-
Anymouse schrieb:
Parameterübergabe an exe:
-i=5 -s=Blub -x=0xa35f
argc = 2
argv[0] = -i=5
argv[1] = -s=Blub
argv[2] = -x=0xa35fDas ist nicht korrekt
Siehe http://msdn.microsoft.com/en-us/library/88w63h9k.aspxargv[0] ist meisten der Programmname.
Du übrgibst drei Parameter, also ist
argc =4
argv[0] = Programmname
argv[1] = -i=5
argv[2] = -s=Blub
argv[3] = -x=0xa35f[/quote]
-
Auch ausserhalb der (Win)main-Funktion kannst du bei MSVC quasi global auf die Parameter zugreifen viá
__argc =4 __argv[0] = Programmname __argv[1] = -i=5 __argv[2] = -s=Blub __argv[3] = -x=0xa35f
-
Hi,
da möchte ich noch meinen Senf dazugeben:
Grundsätzliches zu den globalen Variablen __argc und __argv:
Die Inhalte von __argc und __argv stimmen nicht exakt mit den tatsächlichen Kommandozeilen-Optionen überein, z.B.:
-Ein Leerzeichen bedeutet immer ein neuer Teilstring, z.B. aus "-inifile = no" werden "-inifile", "=" und "no"!
-Es findet eine spezielle Behandlung des Anführungszeichens '"' statt: z.B. aus <-inipath="E:\Meine Dateien\"> wird <-inipath=E:\Meine Dateien">Dies erschwert das Parsen von Kommandozeilen-Optionen unnötig.
Deshalb habe ich als Grundlage für das Parsen von Kommandozeilen-Optionen der String von GetCommandLine() hergenommen: http://msdn.microsoft.com/en-us/library/ms683156(VS.85).aspxDiese Funktion ist sowohl für ANSI als auch für UNICODE geeignet.
Martin