Re: SHBrowseForFolder
- Posted by Dan Moyer <DANIELMOYER at prodigy.net> May 13, 2002
- 437 views
Thomas, Actually, it may not be the depth of a folder that gives me a problem, but rather the number of folders; I can get 4 deep in a directory that has 121 folders total, but crash at 2 deep in a folder that has 130 folders total. Dan Moyer ----- Original Message ----- From: "Dan Moyer" <DANIELMOYER at prodigy.net> To: <EUforum at topica.com> Subject: Re: SHBrowseForFolder > Thomas, etc: > > Is this the latest anyone has done for the browsing for a folder dialog? It > crashes for me under both Win32Lib 55.1 & 57.5, with an illegal operation > error, when I look deeper than about 2 or 3 levels: > > EXW caused an invalid page fault in > module KERNEL32.DLL at 015f:bff7a128. > Registers: > EAX=036e6954 CS=015f EIP=bff7a128 EFLGS=00010202 > EBX=007520bc SS=0167 ESP=0056fb44 EBP=0056fb78 > ECX=62694c32 DS=0167 ESI=007520ac FS=1347 > EDX=4950415c ES=0167 EDI=036e6964 GS=0000 > Bytes at CS:EIP: > 89 51 08 8b 53 08 8b 43 04 8d 8b 0b 10 00 00 c1 > Stack dump: > 0056fb78 007520ac 00650000 00594dcc bff7b30e 00650000 007520ac 00000010 > 00000200 00650000 03280000 00594dcc 007520ac 0056fba6 00401a1f 00650000 > > Dan Moyer > > ----- Original Message ----- > From: "Thomas Parslow (PatRat)" <patrat at rat-software.com> > To: "EUforum" <EUforum at topica.com> > Sent: Thursday, September 06, 2001 3:02 AM > Subject: Re[2]: SHBrowseForFolder > > > > > 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_ULON > G) > > > > 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 > > >