CreateProcess Problem



  • hi leute! gleich etwas code:

    class MyProcess
    {
    public:
    	MyProcess(string Application_Name)
    	{
    		PROCESS_INFORMATION pi = {0}; 
    		STARTUPINFO si = {sizeof(si)}; 
    		si.wShowWindow = SW_NORMAL; 
    
    		if(CreateProcess(NULL,reinterpret_cast<const char*>(Application_Name.c_str()),NULL,NULL,false,CREATE_DEFAULT_ERROR_MODE | CREATE_NEW_CONSOLE,NULL,"c:\\",&si,&pi)==false)
    			throw ProcessException("::CreateProcess failed", __FILE__, __LINE__);
    	}
    };
    

    error:

    error C2664: 'CreateProcessA' : cannot convert parameter 2 from 'const char *' to 'LPSTR'
    

    der cast funktioniert nicht;-( ich weiß nicht wie ich das ändern soll...

    cu



  • CreateProcess ändert unter Umständen den Inhalt des Strings, den du als zweiten Parameter übergibst. Daher darf der kein Zeiger auf const char sein.

    Du musst den Inhalt des Strings in ein hinreichend großes char-Array kopieren und dann das übergeben.



  • nike. schrieb:

    der cast funktioniert nicht;-(

    Das liegt daran, dass das der falsche Cast ist. Mit const_cast geht sowas.
    Das wäre aber trotzdem die falsche Vorgehensweise. Machs einfach so wie's MFK vorgeschlagen hat.



  • habs so geändert:

    class MyProcess
    {
    public:
    	MyProcess()
    	{
    		ZeroMemory( &si, sizeof(si) );
            si.cb = sizeof(si);
            ZeroMemory( &pi, sizeof(pi) );
    		si.wShowWindow = SW_NORMAL;
    	}
    
    	void StartProcess(std::string ApplicationName)
    	{
    			if(CreateProcess(NULL,const_cast<char*>(ApplicationName.c_str()),NULL,NULL,false,CREATE_DEFAULT_ERROR_MODE | CREATE_NEW_CONSOLE,NULL,"c:\\",&si,&pi)==false)
    				throw ProcessException("::CreateProcess failed", __FILE__, __LINE__);
    	}
    
    private:
    	PROCESS_INFORMATION pi;
    	STARTUPINFO si;
    };
    

    frage welchen errorcode außer false lieftert CreatProcess noch?

    cu



  • aus der msdn
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/createprocess.asp

    If the function fails, the return value is zero. To get extended error information, call GetLastError.
    


  • @nike
    Wieso machst du's nicht so, wie's MFK vorgeschlagen hat? c_str() ist nicht ohne Grund const. Im Moment hab ich die Befürchtung, dass dein Programm uU hier UB haben kann.

    btw:
    Übergib einen String als Referenz. Das spart Ressourcen und Rechenzeit.


Anmelden zum Antworten