Datenfilter in CFileDialog
-
hmmm
ich bekomm da den Fehler:
error C2440: 'initializing' : 'class CString' kann nicht in 'char []' konvertiert werden
Kein benutzerdefinierter Konvertierungsoperator verfuegbar, der diese Konvertierung durchfuehren kann, oder der Operator kann nicht aufgerufen werden
-
Dann musst du CString in Char konvertieren.
Steht in der FAQ.Devil
-
Machs so:
CString s; s.Format("Dateien (%s)|%s||", szDateiTyp); char *szFilter = new char[s.GetLength()+1]; strcpy(szFilter,s.GetBuffer(s.GetLength())); s.ReleaseBuffer(); CFileDialog m_dFile(FALSE, m_strExt,m_strDatei,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,szFilter); if(m_dFile.DoModal() == IDOK) { m_strDatei = m_dFile.GetFileName(); } delete[] szFilter;
-
char* CConvert::CStringtoChar(CString str) { int size = str.GetLength(); charstr=new char[size+1]; strcpy(charstr,str.GetBuffer(str.GetLength())); str.ReleaseBuffer(); charstr[size]='\0'; return charstr; }
So, das müsste klappen.
Devil
-
Uff. Und wer kümmert sich um das freigeben des Speichers ?!
-
Welcher Speicher?
Devil
-
Den, den du in der Funktion allokierst!
-
wie sollte ich ihn nach return löschen?
vorher wäre auch keine gute idee...
Oder was sollte die Funktion zurück geben?Devil
-
Eben, das ist das Problem bei deiner Funktion
Ich würde folgende Möglichkeiten ok finden:
1.) Meine
2.) Die Funktion erwartet einen Zeiger auf einen Char, welcher mit NULL initialisiert wurde, dem wird dann Speicher zugewiesen und dann wird er per return zurückgegeben. So könnte der User wissen, dass er den Zeiger selbst löschen muss ... Naja ... da würde aber wahrscheinlihc auhc nciht jeder draufkommen ... oder man übergibt einfach einen char-Zeiger, und die Grösse dieses chararrays und dann wird das dann halt dort reinformatiert. Also im Grunde wie bei funktionen wie strncpy oder strncat ...
-
Ich hab dEUs's Lösung benutzt. Funzt super. Thx