GetOpenFileNameA закрывает программу

Тема в разделе "WASM.BEGINNERS", создана пользователем temi4, 25 янв 2011.

  1. temi4

    temi4 New Member

    Публикаций:
    0
    Регистрация:
    17 янв 2011
    Сообщения:
    22
    Подскажите, почему после вызова GetOpenFileNameA и выбора файла не вызывается MessageBox?
    Компилирую Tasm5Plus
    Откомпилированный файл прилагаю
    Код (Text):
    1. .386p
    2. .model flat
    3.  
    4. extrn   MessageBoxA:PROC
    5. extrn   ExitProcess:PROC
    6. extrn   GetOpenFileNameA:PROC
    7.                          
    8. .data
    9.  
    10. OPENFILENAME label   byte
    11.   lStructSize       dd ?
    12.   hwndOwner         dd ?
    13.   hInstance         dd ?
    14.   lpstrFilter       dd ?
    15.   lpstrCustomFilter dd ?
    16.   nMaxCustFilter    dd ?
    17.   nFilterIndex      dd ?
    18.   lpstrFile         dd ?
    19.   nMaxFile          dd ?
    20.   lpstrFileTitle    dd ?
    21.   nMaxFileTitle     dd ?
    22.   lpstrInitialDir   dd ?
    23.   lpstrTitle        dd ?
    24.   Flags             dd ?
    25.   nFileOffset       dw ?
    26.   nFileExtension    dw ?
    27.   lpstrDefExt       dd ?
    28.   lCustData         dd ?
    29.   lpfnHook          dd ?
    30.   lpTemplateName    dd ?
    31.  
    32. pTitle   db "Hi",0
    33. pMsg     db "Hi",0
    34.  
    35. FilterString db "All Files",0,"*.*",0,0
    36. DlgTitle db  "hi",0
    37. bufname  db   256 dup (0)
    38. .code
    39. msg:
    40.                              
    41.        mov     [lStructSize],76
    42.        mov     [hwndOwner],0
    43.        mov     [hInstance],400000h
    44.        mov     [nMaxFile],256
    45.        mov     [lpstrFile],offset bufname
    46.        mov     [lpstrFilter],offset FilterString
    47.        mov     [nFilterIndex],1
    48.        mov     [Flags],001800h
    49.        mov     [lpstrTitle],offset DlgTitle
    50.  
    51.        push    offset OPENFILENAME
    52.        call    GetOpenFileNameA
    53.  
    54.        push    0                            
    55.        push    offset pTitle
    56.        push    offset pMsg
    57.  
    58.        call    MessageBoxA
    59.  
    60.        cmp     eax,000007h
    61.        je      Exit
    62.  
    63.        push    00h                            
    64.        call    ExitProcess
    65.  
    66. Exit:
    67.        push    00h                            
    68.        call    ExitProcess
    69.        ret
    70.  
    71. end msg
     
  2. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    у MessageBox четыре параметра
     
  3. kernel16

    kernel16 Human Vl

    Публикаций:
    0
    Регистрация:
    29 окт 2010
    Сообщения:
    316
    Код (Text):
    1.  push    0                            
    2.        push    offset pTitle
    3.        push    offset pMsg
    4.  
    5.        call    MessageBoxA
    сколько параметров месейдж боксе? хендаль родителя и тип месейджа и того 4 штуки, а у вас 3
     
  4. kernel16

    kernel16 Human Vl

    Публикаций:
    0
    Регистрация:
    29 окт 2010
    Сообщения:
    316
    Блин. Опять меня опередили. печатать нужно быстрее мне
     
  5. temi4

    temi4 New Member

    Публикаций:
    0
    Регистрация:
    17 янв 2011
    Сообщения:
    22
    спасибо, а как в отладчике сделать, чтобы GetOpenFileNameA, не подвисал??
    те отслеживаю как в стек помещается параметр на OPENFILENAME, а далее жму F8 на call GetOpenFileNameA, окно появляется, но в нем не возможно выбрать ни какого файла, тк оно висит.., а флаг последней ошибки пишет что файл File_Not_Found, хотя я еще не выбирал никакого файла. использую ollyDbg
     
  6. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    отключить обработку исключений в kernel32.dll
     
  7. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Нужно запретить ассемблер.
     
  8. temi4

    temi4 New Member

    Публикаций:
    0
    Регистрация:
    17 янв 2011
    Сообщения:
    22
    в смысле запретить ассемблер?
    А как откл обработку исключений в kernel32?
     
  9. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    Options->Debugging options->Ignore memory access violation in KERNEL32