SHBrowseForFolder - komisches Verhalten
-
Hab mir ne Funktion geschrieben um vom Benutzer einen Ordner zu erfragen:
bool GetFolderFromUserDlg(HWND hwnd, TCHAR *pszTitle, TCHAR *pszBuf) { TCHAR szTemp[MAX_PATH]; BROWSEINFO BI; BI.hwndOwner = hwnd; BI.pidlRoot = 0; BI.pszDisplayName = _T(""); BI.lpszTitle = pszTitle; BI.ulFlags = 0; BI.lpfn = 0; LPITEMIDLIST pidl; pidl = SHBrowseForFolder(&BI); if(!pidl) return false; BOOL bRes; bRes = SHGetPathFromIDList(pidl, szTemp); IMalloc* pMalloc; if(SHGetMalloc(&pMalloc) == S_OK) { pMalloc->Free((void*)pidl); pMalloc->Release(); } if(!bRes) { return false; } lstrcpy(pszBuf, szTemp); return true; }
Das lustige:
Wenn ich danach ein MessageBox(0, "", "", 0); aufrufe, erhalte ich den Ordnernamen angezeigt. Was lief hier falsch?
Mitunter stürzt das Programm auch danach ab .
Ich kann aber keinen Fehler finden .Danke im Voraus,
Black Shadow
-
Member "BI.pszDisplayName" hat einen verwirrenden Namen.
Dort kommt der Zeiger auf ein Puffer rein, in dem dann der Verzeichnisname reinkommt, den der User ausgewählt hat.
So müsste es klappen :... // BI.pszDisplayName = _T(""); BI.pszDisplayName = pszBuf; ...
Der Kompiler hat die Adressen der leeren Strings von _T("") und denen der MessageBox hintereinander gelegt.
Darum hat der Aufruf von "SHBrowseForFolder ()" die leeren Strings der MessageBox überschrieben.
-
-
Danke ihr zwei, so müsste es nun klappen
MfG