проблемаWriteFile Строка Байт Длина вызывает краш
Я пытался все виды байт имеет значение, пытаясь получить WriteFile работать. Проблема в том, что он сразу же падает после записи в файл. Весь текст находится в файле, но все же «Программа потерпела крах, отправьте Microsoft?» Появится диалоговое окно ошибок.
При комментировании вызова WriteFile и всего под ним программа работает нормально и не падает. Однако, когда я просто раскомментирую WriteFile и оставлю весь код ниже, он прокомментировал это снова, и это уродливая голова. Код ниже, и если кто-то может увидеть что-то, что я пропустил, он очень ценится :-)
Байт Длина Я пробовал.
Я попытался байт длины 23, 24 (длина строки + нуль), 25 (Может быть, я забыл байт), а также только с помощью SIZEOF WRITETEXT и все из них не удалось :-(.
Код
.386
.model flat,stdcall
option casemap:none ; Case Sensitive
; Windows
include \masm32\include\windows.inc
; Kernel32
include \masm32\include\kernel32.inc
includelib \masm32\lib\kernel32.lib
.data
FilePath db "C:\test.txt",0
WriteText db "This is some test text."
.code
start:
; Edit a file
invoke CreateFile, addr FilePath, GENERIC_WRITE, FILE_SHARE_WRITE or FILE_SHARE_READ, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL
push eax ; save the file handle
; This works other than the crashing, any number less then 23
; and the file has some of the text clipped
; any larger and NUL is appended until the byte count is matched.
invoke WriteFile, eax, addr WriteText, 23, NULL, NULL
pop eax
push eax
invoke CloseHandle, eax
invoke ExitProcess, 0
end start
Doh! Я прочитал это как «lpNumberOfBytesWritten [out, optional] [...] Этот параметр может быть NULL, только если параметр lpOverlapped равен NULL." (Как и в том, и в том, и в другом, должно быть пустое спасибо. – Zimm3r