Übergabe eines CStrings an ein 2. Dialogfeld



  • Ich habe mit der Klasse CDirTreeCtrl (Falls die jemand kennt...) eine Exploreransicht erstellt in der der Pfad des aktivierten Objekts ermittelt wird und an ein anderes Dialogfeld übergeben.
    Das 2. Dialogfeld erhält allerdings einen völlig schwachsinnigen CString à la " §/%)P&§)%)(§$%?&"§="§/%R/HCID G/I! " und mit dem kann man dann nicht wirklich arbeiten...
    Hier der Code der Übergabe, vielleicht könnt ihr mir helfen:

    HTREEITEM hItem=m_dir.GetSelectedItem();
    	CInfoMovie dlg;
    
            if (hItem){
                if(find(m_dir.GetFullPath(hItem)))
    		{
    			//Code zur Variableneinlesung später hier hin
    		}
    		else
    		{
    			if(MessageBox("No Info for this Item detected. Create a new one?","Create an Info",MB_YESNO))
    			{
    				MessageBox(m_dir.GetFullPath(hItem),"Path:");
    				dlg.m_strPath=m_dir.GetFullPath(hItem);
    				dlg.DoModal();
    			}
    		}
    	}
    
        else
            MessageBox ("No Item Selected...");
          }
    

    wenn ich dann daraufhin im Dialogfeld dlg m_strPath in einer MessageBox ausgeben bzw. es so wie ich es verwednden will in eine Datei reinschreibe kommt der eben genannte Schwachsinn heraus... 😕



  • Speicher das mal in eine temporäre Variable und check mal ob die ok ist.

    CString temp (m_dir.GetFullPath(hItem));



  • Hast du schon den Debugger verwendet.
    Da sieht man ganz genau wo es habert.



  • Lol ich hab rausgefunden wo das Problem is weiß aber immernoch nicht weiter: Ich hab mich etwas im Kontext geirrt, m_strPath is ein const char * und m_dir.GetFullPath(hItem); gibt einen CString zurück.
    Ich glaub ich bau das ganze erstmal um bevor ich noch was poste 😉

    Öhm ja und Debugger...Mehr als tonnenweise adressen kann ich da nicht rauslesen 😕

    Später:
    Hmm ok ich muss zugeben ich bin beträchtlich verwirrt, da ich keine Ahnung hab mit welchem cast man CString zu const char* umwandelt. Entweder er bringt mir einen Fehler das das nicht möglich ist, oder die Ausgabe bleibt dieselbe...



  • m_strPath is ein const char * und m_dir.GetFullPath(hItem); gibt einen CString zurück.

    dann ist ja alles klar...

    - GetFullpath gibt einen temporären CString zurück
    - der CString::operator LPCTSTR gibt einen char const * auf die String-Daten zurück
    - der temporäre CString wird zerstört
    - m_strPath zeigt auf deallozierten Speicher

    entweder m_strPath zu CString machen (empfehlenswert), oder das GetFullPath-Ergebnis in einer lokalen CString-Variable zwischenspeichern.



  • Wow geil danke es funktioniert!
    Aber frag mich bitte nicht wie ich auf die Schnapsidee gekommen bin ausm_strPath einen const char* zu machen...


Log in to reply