In LPCWSTR speichern?



  • Mirsad schrieb:

    CString theString( "C:\\Windows\\notepad.exe C:\\TestDatei.txt" );
    	theString.Trim("\"");
    	LPTSTR lpsz = new TCHAR[theString.GetLength()+1];
    	_tcscpy(lpsz, theString);
    	
    	m_lProgrammName = (LPCTSTR)theString;
    	
    	// Anwendung zum ausführen festlegen
    	hr = pITask->SetApplicationName(m_lProgrammName);
    

    Das theString.Trim("\""); macht wenig Sinn, da in theString sicher keine " gespeichert sind. Sie müssen also irgendwo anders hinzugefügt werden. Wenn du dir nicht sicher bist, benutze mal den Debugger.
    Das erste und letzte Zeichen wegschneiden geht übrigends ganz einfach.
    Z.B. so

    theString = theString.Mid(1);
    theString = theString.Left(theString.GetLength()-1);
    

    Grüße Rapha





  • Versuch doch mal einfach:

    LPCWSTR foo;
    foo = (LPCWSTR)(LPCTSTR)theString;
    

    Lässt sich bei mir ohne Probleme compilieren. Obs Probleme macht hinterher kann ich dir nicht sagen.



  • Hallo Rapha
    danke für den link, bin gerade dabei mir mehr Infos zu holen über dieses Thema!
    mfg
    Mirsad



  • hab jetzt gefunden woran es lag, aber nicht warum! 😃 hier nochmal als beispiel:

    LPCWSTR m_lProgrammName;
        m_lProgrammName = L"C:\\Windows\\notepad.exe C:\\TestDatei.txt"; // Fehlerzeile
    // kein Fehler:
    m_lProgrammName = L"C:\\Windows\\notepad.exe"; // kein Fehler, aber notepad ohne parameter C:\\TestDatei.txt
    
        // Anwendung zum ausführen festlegen
    
        hr = pITask->SetApplicationName(m_lProgrammName);
    

    Warum speichert er die erste Zeile falsch aber die untere richtig??? 😮
    mfg
    mirsad



  • Vielleicht weil ein Leerzeichen drin ist?



  • ok, hab mein fehler gefunden, die ITask Klasse hat auch eine Funktion SetParameter, also SetApplicatonName und SetParameter müssen getrennt gesetzt werden, ich wollte natürlich alles ins eine stecken:

    Falsch:

    LPCWSTR = m_lProgrammName;
    m_lProgrammName = L"C:\\Windows\\notepad.exe C:\\TestDatei.txt";
    hr = pITask->SetApplicationName(m_lProgrammName);
    

    Richtig:

    LPCWSTR m_lProgrammName;
    LPCWSTR m_sDatei;
    	m_lProgrammName = L"C:\\Windows\\notepad.exe";
    	m_sDatei = L"C:\\TestDatei.txt"; // Parameter muß dem Programm separat zugewisen werden
    
        // Anwendung zum ausführen festlegen
    	hr = pITask->SetApplicationName(m_lProgrammName);
    	pITask->SetParameters(m_sDatei);
    // Optional
    	if(FAILED(hr))
    	{
    		MessageBox("Fehler bei Speichern der auszuführenden Anwendung!","Fehler", MB_OK);
    		CoUninitialize();
    	}
    

    Der Consolenbefehl lautet neben bei gesagt so:

    C:\notepad C:\TestDatei.txt
    

    Da war vieleicht mein Fehler das ich gedacht habe das es das selbe ist im Programmieren und Console!
    Stellt sich noch die Frage wie kann ich in aus dem Textfeld in die LPCWSTR speichern??? 😕 🤡 aber das mit dem Textfeld, da brauche ich Hilfe!

    mfg
    mirsad



  • Mirsad schrieb:

    Stellt sich noch die Frage wie kann ich in aus dem Textfeld in die LPCWSTR speichern??? 😕 🤡 aber das mit dem Textfeld, da brauche ich Hilfe!

    mfg
    mirsad

    Probier mal die Casts die ich weiter oben geschrieben habe.



  • the_alien schrieb:

    Mirsad schrieb:

    Stellt sich noch die Frage wie kann ich in aus dem Textfeld in die LPCWSTR speichern??? 😕 🤡 aber das mit dem Textfeld, da brauche ich Hilfe!

    mfg
    mirsad

    Probier mal die Casts die ich weiter oben geschrieben habe.

    Nein. Bitte nicht.



  • Hallo Forum

    the_alien schrieb:

    Versuch doch mal einfach:

    LPCWSTR foo;
    foo = (LPCWSTR)(LPCTSTR)theString;
    

    Lässt sich bei mir ohne Probleme compilieren. Obs Probleme macht hinterher kann ich dir nicht sagen.

    ich habs natürlich probiert, 🙂 , leider auch nicht mit erfolg, ich hab dann so gemacht:

    BSTR bstr; // umweg über BSTR
    CString cstr="TaskName";
    LPCWSTR m_pwszTaskName;
    
    bstr = cstr.AllocSysString();
    m_pwszTaskName = (LPCWSTR) bstr;
    // Jetzt kann der Task name aus der EDIT Box ausgelesen werden und als LPCWSTR auch gespeichert werden
    hr = pITS->NewWorkItem(m_pwszTaskName,CLSID_CTask, IID_ITask, (IUnknown**) &pITask);
    	pITS->Release();
    

    Bessere Idee hatte ich nicht, aber es funktioniert auch so! 😕
    mfg
    Mirsad


Anmelden zum Antworten