Wie LPTSTR lpCmdLine Parameter auswerten?



  • Hallo Leute,

    vorab, ich habe kaum Ahnung von C++.
    Nun habe ich aber das Problem, dass ich an einem alten C++ Programm eine kleine Änderung machen muss, weiß aber nicht wie ich das anstellen soll.

    Also das C++ Programm macht nix anderes als eine in embedded Visual Basic geschriebene .VB aufzurufen. Das soll auch so bleiben, allerdings soll die .VB
    nur aufgerufen werden wenn ein bestimmter CommandLine-Parameter mitgegeben wurde. Also muss ich ja lpCmdLine auswerten, weiß aber nicht wie ich das machen soll.

    Wie im nachfolgenden Code zu sehen ist, habe ich das mit if (lpCmdLine == TEXT("Test")) versucht, was natürlich nicht funktioniert.

    Das Programm z.B. PROGRAMM.vb soll nur interpretiert werden, wenn in lpCmdLine übergebene Parameter z.B. "Test" steht.

    Kann mir jemand bitte ein Beispiel schreiben, wie ich das umsetzen kann?
    Vielen Dank im Voraus!

    Gruß,
    Uwe.

    #include "stdafx.h"
    #define dimof(a) (sizeof(a) / sizeof((a)[0]))
    
    int WINAPI WinMain(	HINSTANCE hInstance,
    					HINSTANCE hPrevInstance,
    					LPTSTR    lpCmdLine,
    					int       nCmdShow)
    {
    
    	// Pfadnamen der EXE-Datei (C-Starter) ermitteln
    
    	TCHAR szCommandLine[MAX_PATH];
        GetModuleFileName(NULL, szCommandLine, dimof(szCommandLine));
    
    	// Das Ende des Pfadnamens (=Anfang des Exe-Namens) ermitteln
        LPTSTR pszEnd = _tcsrchr(szCommandLine, TEXT('\\'));
    	if (pszEnd != NULL)
    	{
    
    		if (lpCmdLine == TEXT("Test"))
    		{
    
    			_tcscpy(&pszEnd[1], TEXT("PROGRAMM.vb"));
    
    			// VB Datei ausführen / starten
    			SHELLEXECUTEINFO sei;
    			memset(&sei, 0, sizeof(sei));
    			sei.cbSize = sizeof(sei);
    			sei.lpFile = szCommandLine;
    			sei.nShow = nCmdShow;
    			ShellExecuteEx(&sei);
    
    		}
    	}
    
    	return 0;
    }
    


  • Da du ja schon _tcscpy benutzt, würde ich mal vermuten, dass _tcscmp funktioniert:

    if ( _tcscmp( lpCmdLine, TEXT("Test") == 0 )
    


  • Hi Manni,

    vielen Dank für die superschnelle Hilfe!!!! Funktioniert einwandfrei!

    Weißt Du oder jemand anderes vielleicht auch, was ich in den Else-Zweig einbauen muss, damit eine Messagebox ausgegeben wird, wenn der Parameter nicht passt?

    Vielen Dank im Voraus!

    Gruß,
    Uwe.



  • Da wir hier im C++-Forum sind:

    #ifdef _UNICODE
    	typedef std::wstring MyString;
    #else
    	typedef std::string MyString;
    #endif
    

    Und in WinMain

    if(_tcscmp(lpCmd,TEXT("Test"))==0)
    {
    	TCHAR szCommandLine[MAX_PATH];
    	GetModuleFileName(hInstance, szCommandLine, MAX_PATH); // besser so
    	MyString str(szCommandLine);
    	size_t pos = str.rfind(TEXT("\\"));
    	if(pos!=MyString::npos)
    	{
    		MyString strVB = str.substr(0,pos+1);
    		strVB += "MeinProgramm.vb";
    		//_tcscpy(szCommand,strVB.c_str());
    		// besser: #include<StrSafe.h>
    		StringCbCopy(szCommandLine,MAX_PATH,strVB.c_str());
    		//..
    		sei.lpFile = szCommandLine;
    	}        
    }
    else
    {
         MessageBox(0,TEXT(""),0,0);
    }
    

    Irgendwelche Berechnungen und Funktionsaufrufe sollten generell erst so spät wie möglich durchgeführt werden.



  • Dieser Thread wurde von Moderator/in pumuckl aus dem Forum C++ in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Auch das funktioniert tadellos!
    Vielen Dank für Eure schnelle Hilfe und sorry, dass ich zunächst im falschen Forum gepostet hatte!

    Gruß,
    Uwe.



  • Vicious Falcon schrieb:

    Da wir hier im C++-Forum sind:

    #ifdef _UNICODE
    	typedef std::wstring MyString;
    #else
    	typedef std::string MyString;
    #endif
    

    das brauchst du nicht so umständlich machen.
    dafür gibt es doch TCHAR:

    typedef std::basic_string<TCHAR> string_type;
    

    bb



  • unskilled schrieb:

    typedef std::basic_string<TCHAR> string_type;
    

    Ah jau, du hast natürlich Recht.


Anmelden zum Antworten