diff options
Diffstat (limited to 'CPP/Windows/Shell.cpp')
-rw-r--r-- | CPP/Windows/Shell.cpp | 32 |
1 files changed, 19 insertions, 13 deletions
diff --git a/CPP/Windows/Shell.cpp b/CPP/Windows/Shell.cpp index 2eb1a960..0d2ac618 100644 --- a/CPP/Windows/Shell.cpp +++ b/CPP/Windows/Shell.cpp @@ -95,16 +95,18 @@ UString CDrop::QueryFileName(UINT fileIndex) { AString fileNameA; UINT bufferSize = QueryFile(fileIndex, (LPTSTR)NULL, 0); - QueryFile(fileIndex, fileNameA.GetBuffer(bufferSize + 2), bufferSize + 1); - fileNameA.ReleaseBuffer(); + const unsigned len = bufferSize + 2; + QueryFile(fileIndex, fileNameA.GetBuf(len), bufferSize + 1); + fileNameA.ReleaseBuf_CalcLen(len); fileName = GetUnicodeString(fileNameA); } else #endif { UINT bufferSize = QueryFile(fileIndex, (LPWSTR)NULL, 0); - QueryFile(fileIndex, fileName.GetBuffer(bufferSize + 2), bufferSize + 1); - fileName.ReleaseBuffer(); + const unsigned len = bufferSize + 2; + QueryFile(fileIndex, fileName.GetBuf(len), bufferSize + 1); + fileName.ReleaseBuf_CalcLen(len); } return fileName; } @@ -120,8 +122,9 @@ void CDrop::QueryFileNames(UStringVector &fileNames) bool GetPathFromIDList(LPCITEMIDLIST itemIDList, CSysString &path) { - bool result = BOOLToBool(::SHGetPathFromIDList(itemIDList, path.GetBuffer(MAX_PATH * 2))); - path.ReleaseBuffer(); + const unsigned len = MAX_PATH * 2; + bool result = BOOLToBool(::SHGetPathFromIDList(itemIDList, path.GetBuf(len))); + path.ReleaseBuf_CalcLen(len); return result; } @@ -208,14 +211,16 @@ bool BrowseForFolder(HWND owner, LPCTSTR title, UINT ulFlags, browseInfo.hwndOwner = owner; browseInfo.pidlRoot = NULL; - // there are Unicode/astring problems in WinCE SDK!!! + // there are Unicode/Astring problems in some WinCE SDK ? + /* #ifdef UNDER_CE - browseInfo.pszDisplayName = (LPSTR)displayName.GetBuffer(MAX_PATH); + browseInfo.pszDisplayName = (LPSTR)displayName.GetBuf(MAX_PATH); browseInfo.lpszTitle = (LPCSTR)title; #else - browseInfo.pszDisplayName = displayName.GetBuffer(MAX_PATH); + */ + browseInfo.pszDisplayName = displayName.GetBuf(MAX_PATH); browseInfo.lpszTitle = title; - #endif + // #endif browseInfo.ulFlags = ulFlags; browseInfo.lpfn = (initialFolder != NULL) ? BrowseCallbackProc : NULL; browseInfo.lParam = (LPARAM)initialFolder; @@ -244,8 +249,9 @@ bool GetPathFromIDList(LPCITEMIDLIST itemIDList, UString &path) ::GetProcAddress(::GetModuleHandleW(L"shell32.dll"), "SHGetPathFromIDListW"); if (shGetPathFromIDListW == 0) return false; - bool result = BOOLToBool(shGetPathFromIDListW(itemIDList, path.GetBuffer(MAX_PATH * 2))); - path.ReleaseBuffer(); + const unsigned len = MAX_PATH * 2; + bool result = BOOLToBool(shGetPathFromIDListW(itemIDList, path.GetBuf(len))); + path.ReleaseBuf_CalcLen(len); return result; } @@ -302,7 +308,7 @@ static bool BrowseForFolder(HWND owner, LPCWSTR title, UINT ulFlags, BROWSEINFOW browseInfo; browseInfo.hwndOwner = owner; browseInfo.pidlRoot = NULL; - browseInfo.pszDisplayName = displayName.GetBuffer(MAX_PATH); + browseInfo.pszDisplayName = displayName.GetBuf(MAX_PATH); browseInfo.lpszTitle = title; browseInfo.ulFlags = ulFlags; browseInfo.lpfn = (initialFolder != NULL) ? BrowseCallbackProc2 : NULL; |