ProblèmeWriteFile chaîne Octet Longueur provoque accident
J'ai essayé toutes sortes d'octets dénombrements essayant d'obtenir WriteFile à travailler. Le problème est qu'il se bloque immédiatement après avoir écrit dans le fichier. Tout le texte est dans le fichier, mais le "Un programme a planté, envoyer à Microsoft ??" La boîte de dialogue d'erreur s'affiche. Lorsque vous commentez l'appel de WriteFile et tout ce qui se trouve en-dessous, le programme s'exécute correctement et ne plante pas. Cependant, quand je décommode juste WriteFile et laisse tout le code ci-dessous, il fait remarquer que c'est de nouveau la tête laide. Le code est ci-dessous et si quelqu'un peut voir quelque chose que j'ai manqué, il est très apprécié :-)
Longueur des octets J'ai essayé.
J'ai essayé longueurs d'octets de 23, 24 (longueur de la chaîne + null), 25 (Peut-être que j'oublièrent un octet), et aussi à l'aide SIZEOF WriteText et tous ont échoué :-(.
code
.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! J'ai lu cela comme "lpNumberOfBytesWritten [out, optionnel] [...] Ce paramètre peut être NULL seulement lorsque le paramètre lpOverlapped est NULL." (Comme dans les deux doivent être nul merci. – Zimm3r