winapi - SHBrowseForFolder not returning Selected folder string by reference -
hello there i'm working on windows application using windows api ms vc++ 2010 , have following code selecting folders:
bool browsefolder(tchar *result) { browseinfo brwinfo = { 0 }; brwinfo.lpsztitle = _t("select source directory"); brwinfo.hwndowner = hwnd; lpitemidlist pitemidl = shbrowseforfolder (&brwinfo); if (pitemidl == 0) return false; // full path of folder tchar path[max_path]; if (shgetpathfromidlist (pitemidl, path)) result = path; imalloc *pmalloc = 0; if (succeeded(shgetmalloc(&pmalloc))) { pmalloc->free(pitemidl); pmalloc->release(); } ::messagebox(hwnd, result, "input", mb_ok); ::messagebox(hwnd, inputfolder, "input", mb_ok); // reference test return true; }
so, opens browse folder dialog, saves selected folder string in reference parameter "result" , returns true if ok.
later call:
browsefolder(inputfolder);
and when try print out content of "inputfolder", shows blank (inputfolder global variable tchar* inputfolder
)
as can see in browsefolder definition send 2 message boxes 1 "result" , other "inputfolder" (this last 1 shows blank)
so question is.. if call: browsefolder(inputfolder);
shouldn't "inputfolder" modified reference? why show empty?
thanks in advance.
if (shgetpathfromidlist (pitemidl, path)) result = path;
this line problem. result
isn't class std::string
, it's pointer buffer of 1 or more tchar
. assigning changes pointer point path
, doesn't copy path
buffer result
points to.
if don't want change use string
class need call function copy string supplied buffer. example:
stringcchcopy(result, max_path, path);
(this assumes buffer max_path
characters in size).
Comments
Post a Comment