|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Май 12, 2004 04:39:35 Следующая программа после нажатия на кнопку "закрыть" не выгружается из памяти если перед этим обработать сообщение IDC_CHANGE_IN (вызов SHBrowseForFolder и SHGetPathFromIDList), если после открытия окна сразу нажать на кнопку "закрыть" - программа выгружается. Подскажите где ошибка. У меня Win2000.
proc start
enter
invoke GetModuleHandle,0
mov [hinstance],eax
invoke DialogBoxParam,[hinstance],200,0,WindowProc,0;вывод основного
; диалогового окна
return
proc WindowProc, hwnd,wmsg,wparam,lparam
enter
push ebx esi edi
cmp [wmsg],WM_INITDIALOG
je .init
cmp [wmsg],WM_COMMAND
je .wmcommand
cmp [wmsg],WM_CLOSE
je .close
.defwndproc:
jmp .ext
.wmcommand:
mov eax,[wparam]
cmp eax,IDC_CHANGE_IN
je .changeIn
jmp .ext
.changeIn:
;если выполнять этот код программа не выгружается из памяти
mov eax,[hwnd]
mov [bi.hwndOwner],eax
mov eax,SelInDir
mov [bi.lpszTitle],eax
mov [bi.ulFlags],BIF_RETURNONLYFSDIRS or BIF_DONTGOBELOWDOMAIN
invoke SHBrowseForFolder,bi
mov [pidl],eax
invoke SHGetPathFromIDList,eax,inBuf
invoke MessageBox,0,inBuf,h4,MB_OK
invoke CoTaskMemFree,[pidl]
jmp .ext
.close:
invoke EndDialog,[hwnd],0
jmp .ext
.init:
invoke LoadIcon,[hinstance],125
invoke SendMessage,[hwnd],WM_SETICON,ICON_SMALL,EAX
jmp .ext
.ext:
xor eax,eax
.finish:
pop edi esi ebx
return
|
|
|
Дата: Май 12, 2004 05:19:23 pas А почему ты в диалоговой процедуре везде FALSE возвращаешь? |
|
|
Дата: Май 12, 2004 07:30:33 Asterix Imho это не криминал. pas SHBrowseForFolder - работает? |
|
|
Дата: Май 12, 2004 15:29:32 А где вызов CoInitialize()?. Кроме того, для освобождения памяти под pidl - MSDN рекомендует использовать другой интерфейс: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shell cc/platform/shell/reference/functions/shbrowseforfolder.asp |
|
|
Дата: Май 12, 2004 17:27:27 А ExitProcess там где-то есть? |
|
|
Дата: Май 12, 2004 18:09:46 Quantum Не было :-(. Теперь выгружается, всем спасибо. |
|
|
Дата: Май 12, 2004 18:15:42 pas Ну это слишком банально, я думал что ты при постинге его потерял и не стал придираться ;-) |
|
|
Дата: Май 13, 2004 03:08:39 Ошибка в том что close возвращает 0 - оно 1 должно. |
|
|
Дата: Май 13, 2004 04:43:34 zzzyab Не правда. |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.042 |