1. Re[2]: SHBrowseForFolder
- Posted by "Thomas Parslow (PatRat)" <patrat at rat-software.com> Sep 06, 2001
- 442 views
> Hi Thomas, > Too bad. > On an NT4 platform i sporadically get a: > "The instruction at 00417608 referenced memory at 455c3a4c. The memory could > not be written" > This seems to occur when the selected folder is deeply nested (say over 4-5 > levels) but not always. > Henri Hi, I seem to get that on deeply nested folders as well. I tracked down the crash to the "free(foldermem)" line. It seems to work if you use win32lib's memory management routines... This version works for me even with very deeply nested folders: include win32lib.ew with trace atom binfo, result,memfolder sequence folder constant xSHBrowseForFolder = registerw32Function(shell32, "SHBrowseForFolder", {C_POINTER}, C_POINTER) constant xSHGetPathFromIDList = registerw32Function(shell32,"SHGetPathFromIDList",{C_ULONG,C_POINTER},C_ULONG) global constant bfOwner = allot( Long ), bfpidlRoot = allot( Long ), bfDisplayName = allot( Lpsz ), bfTitle = allot( Lpsz ), bfFlags = allot( Long ), bfFunction = allot( Long ), bfParam = allot( Long ), bfImage = allot( Long ), SIZEOF_BROWSEINFO = allotted_size() binfo = acquire_mem(0, SIZEOF_BROWSEINFO) store( binfo, bfOwner, 0) store( binfo, bfpidlRoot, NULL) store( binfo, bfDisplayName, "") store( binfo, bfTitle, "Select a Folder") store( binfo, bfFlags, NULL) store( binfo, bfFunction, NULL) store( binfo, bfParam, NULL) store( binfo, bfImage, NULL) result = w32Func(xSHBrowseForFolder, {binfo}) memfolder= acquire_mem(0,repeat(512,0)) if w32Func(xSHGetPathFromIDList,{result,memfolder}) then --the string pointed to by folder now contains the path folder = peek_string(memfolder) else folder = "" end if release_mem(memfolder) release_mem(binfo) if message_box("Folder: " & folder, "Test", MB_OK) then end if Thomas Parslow (PatRat) ICQ #:26359483 Rat Software http://www.rat-software.com/ Please leave quoted text in place when replying