Startparameter prüfen

05/14/2012 12:37 XxharCs#1
Huhu,
ich wolte mein programm überprüfen lassen ob er mit einem bestimmten parameter gestartet wurde. soweit so gut hab ich das halbwegs gemacht, nur funktioniert das nicht gescheit

hoffe um hilfe :)
Code:
for(int i = 1; i < argc; i++){
    if(argv[i] != "lampe"){
        MessageBoxA(0, "Execute the launcher", "Error", MB_ICONERROR);
        ExitProcess(1);
    }
}
05/14/2012 12:51 Nightblizard#2
Du kannst C-Strings nicht mit == oder != überprüfen. Dazu brauchst du strcmp oder stricmp, wenn Groß- und Kleinschreibung keine Rolle spielen.
05/14/2012 13:25 XxharCs#3
ich weiß das man strings nicht vergleichen kann
strcmp/stricmp hab ich probiert, hat aber nicht funktioniert.

ich kanns noch mit equals versuchen
05/14/2012 13:43 Dr. Coxxy#4
zeig mal deinen strcmp code.
05/14/2012 14:53 XxharCs#5
Quote:
Originally Posted by Dr. Coxxy View Post
zeig mal deinen strcmp code.
Code:
for(int i = 1; i < argc; i++){
    if(strcmp ("lampe", argv[i]) != 0){
        MessageBoxA(0, "Please execute 'XxharCs_Launcher'.", "Error", MB_ICONERROR);
	ExitProcess(1);
    }
}
05/14/2012 16:12 Dr. Coxxy#6
und was ist das problem?
05/14/2012 16:22 XxharCs#7
wenn ich das prog ohne parameter starte läuft es.
dabei muss das programm mit dem parameter "lampe" gestartet werden, aber durch andere parameter oder keine parameter* darf sich das prog nicht starten
05/14/2012 16:42 Dr. Coxxy#8
kein wunder, du machst ja auch ne for schleife über argc, wenn man keine parameter angibt geht er nie in die for schleife rein.
05/14/2012 17:14 XxharCs#9
hab die for-schleife ganz ausgelassen, jetzt funktioniert es wenn ich mit meinem externen programm mit dem parameter das prog starte.

wenn ich es ohne parameter oder falschen parameter starte bekomm ich den crash
"Unbehandelte Ausnahme bei 0x00971232 in XxharCs.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0x00000000."

Code:
if(strcmp ("lampe", argv[1]) != 0){ // Hier taucht der Fehler auf
			
	MessageBoxA(0, "Please execute 'XxharCs_Launcher'.", "Error", MB_ICONERROR);
			
	ExitProcess(1);
			
}
05/14/2012 17:54 Nightblizard#10
Natürlich crasht das, wenn du es ohne Parameter startest. argv hat argc Einträge. Rufst du dein Programm nun ohne Parameter auf, dann ist argc 1 und argv beinhaltet nur einen Eintrag. Du greifst aber mit argv[1] auf den 2. Eintrag zu, wodurch du auf Speicher zugreifst, der alles mögliche beinhalten kann.

Prüfe einfach vorher, ob argc <= 1 und du solltest das gewünschte Ergebnis erhalten.
05/14/2012 17:59 Tyrar#11
ich würde ganz einfach
Code:
if(!strstr(GetCommandLineA(),"lampe") {
    MessageBoxA(0, "Please execute 'XxharCs_Launcher'.", "Error", MB_ICONERROR);
    ExitProcess(1);
}
verwenden..

strstr returned die position des 2. parameters in parameter 1

zur besseren sicherheit würde ich auch eher den parent process überprüfen, nicht sehr gut aber besser :)