Problem mit CString



  • Hi Leute, folgendes Problem:

    ich weise einer Variablen vom Typ CString einen Wert zu:

    CString        strPath;
    bRet = ::SHGetPathFromIDList(pIIL, strPath.GetBuffer(_MAX_PATH));
    if( bRet )
    {
        strDirName=strPath;
    }
    

    An einer anderen Stelle versuche ich den Text in strDirName zu löschen. Ich habe es schon mit CString::Empty() versucht und mit strDirName=""
    beides hat leider nichts gebracht, der String bleibt hartnäckig bestehen, es ändert sich garnichts.
    Komischerweise ist es aber so, dass wenn ich eine andere Zuweisung mache, z.B.:
    strDirName="Test", sich der Inhalt von strDirName korrekt ändert.

    Hat jemand eine Idee woran das liegen könnte?


  • Mod

    Wenn Du schon GetBuffer verwendest solltest Du danach auch ReleaseBuffer verwenden um dem String die korrekte Länge zuzuweisen!



  • Also Folgendes klappt problemlos:

    CString strPath; 
      strPath="Hallo Welt!";
      strPath.Empty();  //<= klappt!
      //strPath="";   //<= klappt auch!
    

    Das Problem muss woanders liegen. Wahrscheinlich wird Empty() durch irgendeine Bedingung gar nicht aufgerufen oder du setzt den Wert jedesmal neu. Zeig mal ein bisschen mehr Code (mit deinem Empty()-Aufruf).



  • Hey, danke Martin, hat echt am ReleaseBuffer gelegen.


Anmelden zum Antworten