Сейчас на форуме: vsv1, _MBK_ (+3 невидимых)

 eXeL@B —› Вопросы новичков —› GetOpenFilename и GetSaveFileName глючат... - программа вылетает
Посл.ответ Сообщение

Ранг: 9.8 (гость)
Активность: 0.020
Статус: Участник

Создано: 07 декабря 2007 23:33
· Личное сообщение · #1

пишу я программу, которая преобразования файла в
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




Ранг: 495.3 (мудрец)
Активность: 0.30
Статус: Участник

Создано: 08 декабря 2007 06:10
· Личное сообщение · #2

Скомпилил - диалог не вылетает.
Здесь конечго баги есть и без этого, но сабж, похоже, скрывается в ______.RES.
rc-файл(ы) в студию...
Или вот, сам разбирайся:

______.rc:

#define IDD_DLG1 1000
#define IDC_BTN1 1001
IDD_DLG1 DIALOGEX 6,6,194,104
CAPTION "IDD_DLG"
FONT 8,"MS Sans Serif",0,0
STYLE 0x10CF0800
EXSTYLE 0x00000000
BEGIN
CONTROL "Boom",IDC_BTN1,"Button",0x50010000,70,38,50,13,0x00000000
END


Скомпи этот rc. Только не GoRC - он глючный. Возьми rc.exe из MASM (или VC) и выполни:
"rc /v ______.rc"

Скомпили свой пример. Если глюк пропал - ищи отличия ;)

-----
Всем привет, я вернулся




Ранг: 9.8 (гость)
Активность: 0.020
Статус: Участник

Создано: 08 декабря 2007 19:03
· Личное сообщение · #3

не GoRC - компилирую все *.RC с помощью RC Масмовского
все-равно вылетает... это или у меня система кривая (может вредная пограмма какая-то), или это майкрософт криво апишку GetSaveFileName писали

откомпилил... все-равно вылетает....

и у Delphi тоже пробовал - скинул на форму OpenFileDialog И SaveFileDialog и две кнопки
на нажатия одной - OpenDialog1.Execute;
второй - SaveDIalog1.Execute;

когда появлялся SaveDialog, выбирал файл, программа вылетала и появлялся Дельфийский отладчик, который вроде после команды mov ecx,[eax] вылетал...

я не уверен, что у тебя не вылетает - просто это не на любом файле...

prikolitvc.ucoz.ru/Boom.rar - в архиве видео, снятое CamStudio , на нем видно, как прога вылетает...



Ранг: 495.3 (мудрец)
Активность: 0.30
Статус: Участник

Создано: 09 декабря 2007 06:23
· Личное сообщение · #4

1. У меня точно нет подобных глюков.
2. Чтоб сказать наверняка, что это ты свою систему так "настроил", нужно обменяться exe.
Вот мой:



cc26_08.12.2007_CRACKLAB.rU.tgz - antiBug4.exe

-----
Всем привет, я вернулся




Ранг: 9.8 (гость)
Активность: 0.020
Статус: Участник

Создано: 09 декабря 2007 18:34
· Личное сообщение · #5

не.... твой исходник у меня тоже глючит....
да, это скорее всего что-то с системой...


 eXeL@B —› Вопросы новичков —› GetOpenFilename и GetSaveFileName глючат... - программа вылетает
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати