Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.02.2012, 22:16   #1
_PROGRAMM_
Участник клуба
 
Аватар для _PROGRAMM_
 
Регистрация: 30.07.2009
Сообщений: 1,601
По умолчанию WriteFile в циклах

Доброй ночи. Проблема у меня вот такая. Я разрабатывал программу, где в цикле, а это довольно часто, используется функция WriteFile. Очень интересно узнать тонкости ее работы, дело в том, что в следующем коде,
Код:
include "%fasminc%\win32ax.inc"
.data
FileName      db 'silvirur',0
FileHandle    dd 0
fECX          db 0
sd            db 'Hello',0
.code
start:

                  invoke CreateFile,FileName,GENERIC_WRITE,FILE_SHARE_READ,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_ARCHIVE,0
                  mov [FileHandle],eax
begin:
                  mov ecx,90d

  write:          push ecx
                  mov [fECX],cl
                  invoke GetAsyncKeyState,ecx; Получаем состояние клавиши
                  mov ecx, eax
                  JCXZ endloop                  ; Повторим цикл
                  invoke SetFilePointer,[FileHandle],1,NULL,FILE_CURRENT
                  invoke WriteFile, [FileHandle],fECX,1,NULL,0
    endloop:      pop ecx                       ; Конец вложенного цикла

                  loop write                    ; Состояние клавиш
                  jmp begin                     ; Повторим операции

                  invoke CloseHandle,[FileHandle]
                  invoke ExitProcess,0
.end start
функция находится во вложенном цикле. И после запуска приложение прекращает свою работу с ошибкой(Закрыть, отладить). Но цикл
Код:
write:
loop write
несколько раз срабатывает. если закомментировать invoke WriteFile, [FileHandle],fECX,1,NULL,0 все работает. Почему?

В мире нет вечных двигателей, зато есть вечные тормоза...

Блог
_PROGRAMM_ вне форума Ответить с цитированием
Старый 11.02.2012, 22:35   #2
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

Хоть вам и не нужна переменная lpNumberOfBytesWritten, но определять ее все таки приходится. Функция пытается записать, сколько байт она записала в файл. В вашем случае, она пытатется это делать в аддрес NULL что ес-но приводит к вылету.
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4
Goodwin98 вне форума Ответить с цитированием
Старый 11.02.2012, 22:47   #3
_PROGRAMM_
Участник клуба
 
Аватар для _PROGRAMM_
 
Регистрация: 30.07.2009
Сообщений: 1,601
По умолчанию

Спасибо большое. Я надеялся, что там проверка на NULL есть.

В мире нет вечных двигателей, зато есть вечные тормоза...

Блог
_PROGRAMM_ вне форума Ответить с цитированием
Старый 11.02.2012, 23:00   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

это обязательный параметр, потому проверки нет.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблемы с WriteFile Silly Student C++ Builder 0 07.12.2011 10:28
NamedPipe & WriteFile capta1n Win Api 2 02.06.2010 14:37
Файл падает после WriteFile --=SaNitinDG=- Общие вопросы C/C++ 6 15.02.2010 20:20
Альтернатива WriteFile Egor2005 Win Api 3 11.04.2007 20:11