Проблема с GetOpenFileName

Тема в разделе "WASM.BEGINNERS", создана пользователем vg, 19 май 2007.

  1. vg

    vg New Member

    Публикаций:
    0
    Регистрация:
    16 апр 2007
    Сообщения:
    475
    Нужно получить путь и имя файла через GetFileName.
    Есть код

    EditClassName db "edit",0
    SelectFile db "Select File",0
    fPattern db "*.*",0,0
    hwndEditFile DWORD ?
    ofn OPENFILENAME <>
    szFileName DWORD ?


    invoke CreateWindowEx,
    WS_EX_CLIENTEDGE,
    ADDR EditClassName,
    NULL,
    WS_CHILD or WS_VISIBLE or ES_AUTOHSCROLL,
    70,95,
    250,20,
    hwnd,
    0,
    hInstance,
    NULL
    mov hwndEditFile,eax


    invoke GetFileName,hWnd,ADDR SelectFile,ADDR fPattern
    cmp szFileName[0],0
    je @F
    invoke SetWindowText,hwndEditFile,ADDR szFileName
    @@:


    GetFileName proc hParent:lol: WORD,lpTitle:lol: WORD,lpFilter:lol: WORD

    mov ofn.lStructSize, sizeof OPENFILENAME
    m2m ofn.hWndOwner, hParent
    m2m ofn.hInstance, hInstance
    m2m ofn.lpstrFilter, lpFilter
    m2m ofn.lpstrFile, offset szFileName
    mov ofn.nMaxFile, sizeof szFileName
    m2m ofn.lpstrTitle, lpTitle
    mov ofn.Flags, OFN_EXPLORER or OFN_FILEMUSTEXIST or OFN_LONGNAMES

    invoke GetOpenFileName,ADDR ofn

    ret

    GetFileName endp

    При вызове GetFileName и выборе файла edit показывает какие-то "левые" символы.
    В чём может быть ошибка?
     
  2. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    szFileName db 256 dup(?). Ты ж под имя тока 4 байта выделил.
     
  3. AndreyATC

    AndreyATC New Member

    Публикаций:
    0
    Регистрация:
    16 май 2007
    Сообщения:
    60
    vg
    удивительно что прога не слетает!
    куда ты имя файла записываеш? в 4 байта?
     
  4. Twister

    Twister New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    720
    Адрес:
    Алматы
    Ну а вообще, чтоб в коде не болталось просто так 256 нулевых байт, лучше место под эту переменную резервировать на лету (на стеке, к примеру)...