Re: SHBrowseForFolder
- Posted by Dan Moyer <DANIELMOYER at prodigy.net> May 13, 2002
- 435 views
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 >