Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

GetOpenFilename и GetSaveFileName глючат... - программа вылетает

22K
07 декабря 2007 года
Necromancer13
36 / / 24.10.2007
пишу я программу, которая преобразования файла в
db XXX,XXX,XXX,XXX,XXX,XXX,XXX
db XXX,XXX,XXX,XXX,XXX,XXX,XXX
и т.д.....

я понимаю, что таких программ много, но хочу написать сам....

ну так вот...
в начале программы вызывается GetOpenFileName, я выбираю файл... все нормально
потом вызывается GetSaveFileName - если я сразу выбираю файл - то все ок,
а если выбираю в поле "тип файлов", чтобы показывались все файлы (*.*), навожу курсор на какой-то файл в SaveFileDialog и секунду-две подержу - SaveFileDialog закрывается...

я заметил, что в FASMW так же сама проблема...
и подумал, что это ВИнда криво написанная...

но "Блокнот" Винды, RadASM и остальные программы, работают нормально


может кто-то стыкался с такоей проблемой? подсскажите, плиз, что делать
я уже целый день мучаюсь и ничего не могу сделать(

вот исходник программы:



Код:
format PE GUI 4.0
entry start
include '%fasminc%\win32a.inc'
hInstance dd ?
ofn OPENFILENAME
FilterString1 db 'EXE/DLL-files (*.exe/*.dll)',0,'*.exe;*.dll',0,'All Files (*.*)',0,'*.*',0,0
FilterString2 db 'ASM/INC-Files (*.asm/*.inc)',0,'*.asm;*.inc',0,'All Files (*.*)',0,'*.*',0,0
buffer1 db 512 dup (?)
buffer2 db 512 dup (?)
hFile1 dd ?
hFile2 dd ?
start:
invoke GetModuleHandle,0
mov [hInstance],eax
invoke DialogBoxParam,eax,1000,0,DlgProc,0
invoke ExitProcess,0

proc DlgProc hWnd,uMsg,wParam,lParam
cmp [uMsg],WM_COMMAND
jz .wmcommand
cmp [uMsg],WM_CLOSE
jz .wmclose
xor eax,eax
ret
.wmclose:
invoke EndDialog,[hWnd]
xor eax,eax
inc eax
ret
.wmcommand:
mov eax,[wParam]
mov edx,eax
shr edx,16
cmp dx,BN_CLICKED
jne _nafig
invoke RtlZeroMemory,ofn,sizeof.OPENFILENAME
mov [ofn.lStructSize],sizeof.OPENFILENAME
push [hWnd]
pop [ofn.hwndOwner]
push [hInstance]
pop [ofn.hInstance]
mov [ofn.lpstrFilter],FilterString1
mov [ofn.lpstrFile],buffer1
mov [ofn.nMaxFile],512
mov [ofn.Flags],OFN_PATHMUSTEXIST or OFN_FILEMUSTEXIST or OFN_HIDEREADONLY
mov byte [buffer1],0
invoke GetOpenFileName,ofn
dec eax
jnz _nafig
invoke RtlZeroMemory,ofn,sizeof.OPENFILENAME
mov [ofn.lStructSize],sizeof.OPENFILENAME
push [hWnd]
pop [ofn.hwndOwner]
push [hInstance]
pop [ofn.hInstance]
mov [ofn.lpstrFilter],FilterString2
mov [ofn.lpstrFile],buffer2
mov [ofn.nMaxFile],512
mov [ofn.Flags],OFN_PATHMUSTEXIST or OFN_FILEMUSTEXIST or OFN_HIDEREADONLY
mov byte [buffer2],0
invoke GetSaveFileName,ofn
dec eax
jnz _nafig
invoke CreateFile,buffer1,GENERIC_READ or GENERIC_WRITE,0,0,OPEN_EXISTING,0,0
mov [hFile1],eax
invoke CreateFile,buffer2,GENERIC_READ or GENERIC_WRITE,0,0,CREATE_ALWAYS,0,0
mov [hFile2],eax
invoke GetFileSize,[hFile1],0
mov ebx,eax
jmp _next
ccc dd ?
NumRead dd ?
NumWritten dd ?
buf db 5 dup (?)
_fm db '0%Xh',0
___s1 db 9,'db '
___x1 db 5 dup (?)
__koma db ','
___s2 db 0Dh,0Ah
MessDone db 'DONE!',0
_next:
invoke WriteFile,[hFile2],___s1,4,NumWritten,0
mov [ccc],15
invoke ReadFile,[hFile1],___x1,1,NumRead,0
dec ebx
jz .pend
movzx eax,byte [___x1]
invoke wsprintf,buf,_fm,eax
add esp,12
invoke lstrlen,buf
invoke WriteFile,[hFile2],buf,eax,NumWritten,0
.loop:
invoke WriteFile,[hFile2],__koma,1,NumWritten,0
invoke ReadFile,[hFile1],___x1,1,NumRead,0
dec ebx
jz .pend
movzx eax,byte [___x1]
invoke wsprintf,buf,_fm,eax
add esp,12
invoke lstrlen,buf
invoke WriteFile,[hFile2],buf,eax,NumWritten,0
dec [ccc]
jz .nextloop
jmp .loop
.nextloop:
dec ebx
jz .pend
inc ebx
invoke WriteFile,[hFile2],___s2,2,NumWritten,0
jmp _next
.pend:
invoke ReadFile,[hFile1],___x1,1,NumRead,0
movzx eax,byte [___x1]
invoke wsprintf,buf,_fm,eax
add esp,12
invoke lstrlen,buf
invoke WriteFile,[hFile2],buf,eax,NumWritten,0
.end:
invoke CloseHandle,[hFile1]
invoke CloseHandle,[hFile2]
invoke MessageBox,0,MessDone,MessDone,MB_ICONINFORMATION
_nafig:
xor eax,eax
inc eax
ret
endp

data import
library user32,'user32.dll',
kernel32,'kernel32.dll',
comdlg32,'comdlg32.dll'
include '%fasminc%\api\user32.inc'
include '%fasminc%\api\kernel32.inc'
include '%fasminc%\api\comdlg32.inc'
end data

section '.rsrc' resource from '______.RES' data readable
246
08 декабря 2007 года
GIZMO
1.8K / / 30.07.2004
Цитата: Necromancer13
пишу я программу, которая преобразования файла в
db XXX,XXX,XXX,XXX,XXX,XXX,XXX
db XXX,XXX,XXX,XXX,XXX,XXX,XXX
и т.д.....

я понимаю, что таких программ много, но хочу написать сам....

ну так вот...
в начале программы вызывается GetOpenFileName, я выбираю файл... все нормально
потом вызывается GetSaveFileName - если я сразу выбираю файл - то все ок,
а если выбираю в поле "тип файлов", чтобы показывались все файлы (*.*), навожу курсор на какой-то файл в SaveFileDialog и секунду-две подержу - SaveFileDialog закрывается...

я заметил, что в FASMW так же сама проблема...
и подумал, что это ВИнда криво написанная...

но "Блокнот" Винды, RadASM и остальные программы, работают нормально


может кто-то стыкался с такоей проблемой? подсскажите, плиз, что делать
я уже целый день мучаюсь и ничего не могу сделать(

вот исходник программы:



Код:
format PE GUI 4.0
entry start
include '%fasminc%\win32a.inc'
hInstance dd ?
ofn OPENFILENAME
FilterString1 db 'EXE/DLL-files (*.exe/*.dll)',0,'*.exe;*.dll',0,'All Files (*.*)',0,'*.*',0,0
FilterString2 db 'ASM/INC-Files (*.asm/*.inc)',0,'*.asm;*.inc',0,'All Files (*.*)',0,'*.*',0,0
buffer1 db 512 dup (?)
buffer2 db 512 dup (?)
hFile1 dd ?
hFile2 dd ?
start:
invoke GetModuleHandle,0
mov [hInstance],eax
invoke DialogBoxParam,eax,1000,0,DlgProc,0
invoke ExitProcess,0

proc DlgProc hWnd,uMsg,wParam,lParam
cmp [uMsg],WM_COMMAND
jz .wmcommand
cmp [uMsg],WM_CLOSE
jz .wmclose
xor eax,eax
ret
.wmclose:
invoke EndDialog,[hWnd]
xor eax,eax
inc eax
ret
.wmcommand:
mov eax,[wParam]
mov edx,eax
shr edx,16
cmp dx,BN_CLICKED
jne _nafig
invoke RtlZeroMemory,ofn,sizeof.OPENFILENAME
mov [ofn.lStructSize],sizeof.OPENFILENAME
push [hWnd]
pop [ofn.hwndOwner]
push [hInstance]
pop [ofn.hInstance]
mov [ofn.lpstrFilter],FilterString1
mov [ofn.lpstrFile],buffer1
mov [ofn.nMaxFile],512
mov [ofn.Flags],OFN_PATHMUSTEXIST or OFN_FILEMUSTEXIST or OFN_HIDEREADONLY
mov byte [buffer1],0
invoke GetOpenFileName,ofn
dec eax
jnz _nafig
invoke RtlZeroMemory,ofn,sizeof.OPENFILENAME
mov [ofn.lStructSize],sizeof.OPENFILENAME
push [hWnd]
pop [ofn.hwndOwner]
push [hInstance]
pop [ofn.hInstance]
mov [ofn.lpstrFilter],FilterString2
mov [ofn.lpstrFile],buffer2
mov [ofn.nMaxFile],512
mov [ofn.Flags],OFN_PATHMUSTEXIST or OFN_FILEMUSTEXIST or OFN_HIDEREADONLY
mov byte [buffer2],0
invoke GetSaveFileName,ofn
dec eax
jnz _nafig
invoke CreateFile,buffer1,GENERIC_READ or GENERIC_WRITE,0,0,OPEN_EXISTING,0,0
mov [hFile1],eax
invoke CreateFile,buffer2,GENERIC_READ or GENERIC_WRITE,0,0,CREATE_ALWAYS,0,0
mov [hFile2],eax
invoke GetFileSize,[hFile1],0
mov ebx,eax
jmp _next
ccc dd ?
NumRead dd ?
NumWritten dd ?
buf db 5 dup (?)
_fm db '0%Xh',0
___s1 db 9,'db '
___x1 db 5 dup (?)
__koma db ','
___s2 db 0Dh,0Ah
MessDone db 'DONE!',0
_next:
invoke WriteFile,[hFile2],___s1,4,NumWritten,0
mov [ccc],15
invoke ReadFile,[hFile1],___x1,1,NumRead,0
dec ebx
jz .pend
movzx eax,byte [___x1]
invoke wsprintf,buf,_fm,eax
add esp,12
invoke lstrlen,buf
invoke WriteFile,[hFile2],buf,eax,NumWritten,0
.loop:
invoke WriteFile,[hFile2],__koma,1,NumWritten,0
invoke ReadFile,[hFile1],___x1,1,NumRead,0
dec ebx
jz .pend
movzx eax,byte [___x1]
invoke wsprintf,buf,_fm,eax
add esp,12
invoke lstrlen,buf
invoke WriteFile,[hFile2],buf,eax,NumWritten,0
dec [ccc]
jz .nextloop
jmp .loop
.nextloop:
dec ebx
jz .pend
inc ebx
invoke WriteFile,[hFile2],___s2,2,NumWritten,0
jmp _next
.pend:
invoke ReadFile,[hFile1],___x1,1,NumRead,0
movzx eax,byte [___x1]
invoke wsprintf,buf,_fm,eax
add esp,12
invoke lstrlen,buf
invoke WriteFile,[hFile2],buf,eax,NumWritten,0
.end:
invoke CloseHandle,[hFile1]
invoke CloseHandle,[hFile2]
invoke MessageBox,0,MessDone,MessDone,MB_ICONINFORMATION
_nafig:
xor eax,eax
inc eax
ret
endp

data import
library user32,'user32.dll',
kernel32,'kernel32.dll',
comdlg32,'comdlg32.dll'
include '%fasminc%\api\user32.inc'
include '%fasminc%\api\kernel32.inc'
include '%fasminc%\api\comdlg32.inc'
end data

section '.rsrc' resource from '______.RES' data readable



http://forum.codenet.ru/archive/index.php/t-5093.html
главное правильно инициализировать структуру, размер ее на разных ОС разный, ты это сделал?

22K
08 декабря 2007 года
Necromancer13
36 / / 24.10.2007
да вроде правильно...
такие программы как PEditor, PEiD, FASMW .... тоже вылетают... похоже, это или криво винду писали, или у меня "кривая" винда...;) или программа какая-то вредоносная...
246
09 декабря 2007 года
GIZMO
1.8K / / 30.07.2004
Цитата: Necromancer13
да вроде правильно...


а мне кажется нет:) у тебя ofn.lStructSize = sizeof(OPENFILENAME), а надо ofn.lStructSize = OPENFILENAME_SIZE_VERSION_400; (если в терминах С/С++)

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог