Frage zur CommandLine



  • Hello again,

    wie muss die CommandLine aussehen, wenn ich eine MFC App z. B. über eine .bat Datei mit Parametern starten will?
    App = Dialogbasierte MFC App

    Folgendes:
    In der .bat steht:

    K:\MyApp\MyApp.exe "E:\MLS\Test\TestFiles\TestFile.txt|blablablubb"
    

    In der App, in OnInitDialog steht:

    CString cmdLine = AfxGetApp()->m_lpCmdLine;
    
    	CString file2load = _T("");
    	CString sntc2show = _T("");
    	int p1;
    
    	if( this->GetSafeHwnd() )
    	{
    		if( !cmdLine.IsEmpty() )
    		{
    			p1 = cmdLine.Find( (char)124 );
    			if( p1 > -1 )
    				file2load = cmdLine.Mid( 0, p1 );
    
    			if( !file2load.IsEmpty() )
    				LoadDataInListCtrl( file2load );
    		}
    	}
    

    In dem String werden 2 Parameter übergeben, 1. der Pfad/Dateiname( Inhalt kommt in Listbox ), 2. Suchbegriff( Wird in der Liste markiert - nur so am Rande ), durch ein | getrennt.
    Das Aufdröseln des Strings ist kein Thema, funktioniert auch.
    Allerdings nur, wenn ich die Zeile( aus der .bat ) über Projekteinstellungen->Programmargumente übergebe. Dann ist alles ok.
    Bei der Übergabe aus der .bat Datei steigt er vor erreichen des o. g. Codes aus. Wo liegt mein Fehler?

    Thx für Hilfe

    grüssle 🙂


  • Mod

    Ansonsten kann man an diesem Code so keinen Fehler erkennen.
    Dir ist klar, dass die Anführungszeichen auch mitkommen?

    BTW: Du könntest auch direkt __argc und __argv verwenden.



  • Sodele, hab mal die Anführungszeichen weggemacht. Jetzt knallt es nicht mehr *FROI*.
    Allerdings blitzt jetzt nur noch kurz das DOS fenster auf und das wars 😮 .

    Werd mir jett mal ne TestApp schreiben und das ganze über ShellExecute versuchen.

    grübel und grüssle 🙂


  • Mod

    Was hällst Du von Debuggen. Kann doch nicht so schwer sein, die Übergabe der Parameter in de´n Debug Eigenschaften einzutragen.



  • Naja, hab mir jetzt ne TestApp erstellt. Aufruf mit ShellExecute klappt problemlos. Nur bei Start über .bat Datei knallts immernoch 😮

    grüssle 🙂



  • Hmpf,

    ok. Der im Eingangspost stehende Code funktioniert in einer Dlg-basierenden App. Nicht aber in einer SDI-App.
    Frage: Wie bekomme ich den String in die View Klasse?
    In der InitInstance steigt er jedesmal bei:

    if (!ProcessShellCommand(cmdInfo))
    		return FALSE;
    

    und dann:

    m_pMainWnd->ShowWindow(SW_SHOW);
    

    aus, weil:

    m_pMainWnd = 0x00000000 {CWnd m_hWnd=???}
    

    😞

    Kann man das irgendwie 'aushebeln', bzw die cmdInfo wieder in den Urzustand versetzen?

    Mir ist klar, das ProcessShellCommand mit dem String nix anfangen kann, soll aber auch nicht.

    Ich will ihn, und that's it.

    grüssle 🙂

    Edit: hat sich erledigt, schneller geschrieben als gedacht 😮


Anmelden zum Antworten