GetCommandLine und GetModuleFileName
-
Moin,
Ich möchte die Parameter in meinem Programm auswerten und benutze die Funktionen wie oben angegeben.
Nur die Funktion GetModuleFileName funktioniert nicht richtig.
Im Debug Modus geht alles aber im Release Modus liefert die Funktion GetModuleFileName nichts zurück?
Wenn keine Parameter angegeben wurden soll ein Dialog geöffnet werden in dem der Benutzer die Datei wählen kann.
Findet jemand den Fehler?
Code:char file[MAX_PATH]; GetModuleFileName(NULL,file,strlen(file)); CString cmdT; cmdT = GetCommandLine(); CString Parameter; if(strlen(cmdT) != (strlen(file) - 2)) { for(int pi = (strlen(file) + 3); pi <= (strlen(cmdT) - 1); pi++) { Parameter += cmdT[pi]; } m_Selection = Parameter; } else { CString m_SelectionA; CFileDialog m_ldFile(TRUE,NULL,NULL,NULL, "STD(S...D...) Dateien (*.std)|*.std|Textdateien (*.txt)|*.txt|Alle Dateien (*.*)|*.*||"); if (m_ldFile.DoModal() == IDOK) m_Selection = m_ldFile.GetPathName(); } if ( Ref == 0) { OnInitialUpdate(4000,4000,1); } return m_Selection;
Im Debug Modus ist file = "C:\MyApp\MyApp.exe"
und cmdT = C:\MyApp\MyApp.exe test.std
Im Release Modus ist file = ""
und cmdT = C:\MyApp\MyApp.exe test.stdIch danke.
MFG
ReneS
-
Hat denn keiner auch nur ansatzweise eine Idee??????????
-
Original erstellt von ReneS:
Hat denn keiner auch nur ansatzweise eine Idee??????????Doch, also ich habe eine Idee. 'strlen(file)' liefert dir die Länge eines null-terminated Strings. Du brauchts aber die größe des Buffers, also sowas wie 'sizeof(file)'.
Warum das im Debug-Modus auch mit 'strlen(file)' funktioniert, kann ich auch nicht sagen, eigentlich müsste es da auch schon Fehler geben.
Gruß mathi
[ Dieser Beitrag wurde am 14.02.2003 um 12:15 Uhr von mathi editiert. ]
-
Damit könntest du sogar recht haben, aber die Funktion GetModuleFileName giebt nichts zurück.
Das ist das Problem.
-
Original erstellt von ReneS:
Damit könntest du sogar recht haben, aber die Funktion GetModuleFileName giebt nichts zurück.
Das ist das Problem.Was meinst du mit Nichts? Ist der Returnwert 0, oder ist file leer?
Also folgendes funktioniert bei mir im Debug- und Release-Modus einwandfrei:
char file[MAX_PATH]; DWORD strSize = GetModuleFileName(NULL,file,sizeof(file)); MessageBox(file);
Vielleicht sollte man noch etwas Platz für das String-Termitation Zeichen lassen, aber das müsste man dann ggf. auch selber setzen.
-
Original erstellt von mathi:
**Was meinst du mit Nichts? Ist der Returnwert 0, oder ist file leer?Also folgendes funktioniert bei mir im Debug- und Release-Modus einwandfrei:
char file[MAX_PATH]; DWORD strSize = GetModuleFileName(NULL,file,sizeof(file)); MessageBox(file);
Vielleicht sollte man noch etwas Platz für das String-Termitation Zeichen lassen, aber das müsste man dann ggf. auch selber setzen.**
Ne, müsste man nicht... Das setzt doch GetModuleFileName
-
Original erstellt von MaSTaH:
Ne, müsste man nicht... Das setzt doch GetModuleFileNameAlso, wenn MAX_PATH schon das Null-Termination-Zeichen berücksichtig, stimme ich dir zu, ansonsten nicht. Ich habe statt MAX_PATH einfach mal '10' angegeben. Die ersten 10 Zeichen waren auch korrekt, aber ich habe auch noch ein paar undefinierte Zeichen mit zu bekommen.
OK, ist ein Grenzfall, i.a. ist der Path kürzer als MAX_PATH und dann setzt GetModul... das String-Ende.
[ Dieser Beitrag wurde am 14.02.2003 um 15:21 Uhr von mathi editiert. ]