std+CreateFile: почему вылетает?

Тема в разделе "WASM.BEGINNERS", создана пользователем Alexey2005, 19 июл 2006.

  1. Alexey2005

    Alexey2005 New Member

    Публикаций:
    0
    Регистрация:
    9 янв 2006
    Сообщения:
    19
    Адрес:
    Russia
    Никак не могу понять: почему при выполнении CreateFile, например,
    invoke CreateFile,szXX,GENERIC_READ or GENERIC_WRITE,0,0,\
    OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0

    программа вылетает с сообщением о переполнении стека, если хотя бы раз перед вызовом CreateFile встречалась команда std?
    И как можно устранить эту проблему? Что же, получется, в Windows-программах цепочки символов можно только в "прямом" направлении обрабатывать, а в обратном - никак?
     
  2. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    А что мешает добавить cld перед вызовом?
     
  3. Bill_Prisoner

    Bill_Prisoner New Member

    Публикаций:
    0
    Регистрация:
    4 май 2005
    Сообщения:
    238
    Alexey2005
    Эту проблему решить нельзя, т.к. это соглашение о вызовах функций Win API - callback функции должны сохранять регистры ebx,esp,ebp,esi,edi и флаг напрвления. Теже правила и при вызове API функций. Они также сохраняют регистры. И одно еще одно правило - направление должно быть положительным. В windows можно работать в любом направлении обработки цепочек, просто до вызова любой API флаг направления нужно делать положительным.
     
  4. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Bill_Prisoner
    Если сохранение esp подразумевает соглашение stdcall, то есть одно исключение - user32!wsprintf.
     
  5. Bill_Prisoner

    Bill_Prisoner New Member

    Публикаций:
    0
    Регистрация:
    4 май 2005
    Сообщения:
    238
    Quantum
    Да-да, вы совершенно правы!!!
     
  6. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Quantum
    Имеется ввиду сохранение esp внутри колбэка.