Hola a todos.
Estoy empezando en esto del masm32 y codeando un simple programa que te escribe una palabra en la consola y espera a que pulses una tecla para terminar,me han surgido algunas dudas que no consigo resolver.
Les pongo mi code y les cuento:
.386
.model flat, stdcall
option casemap:none
include kernel32.inc
include windows.inc
includelib kernel32.lib
.data
;variables necesarias
msg db 'hola',0
buff db ?
hout dd ?
hin dd ?; handles de e/s
tit db 'Consola Demo',0
.code
start:
call con
call pinta
push hin
call CloseHandle
; Cierro los handles abiertos
push hout
call CloseHandle
call FreeConsole ; Cierro la consola
; Salgo de forma controlada
push NULL
call ExitProcess
con proc
;call AllocConsole
; solicito poder crear una consola
; Esto sobra porque el programa es de consola
push STD_OUTPUT_HANDLE
call GetStdHandle; obtendre el handle de la consola
mov hout,eax ; copio a hout el handle obtenido
push STD_INPUT_HANDLE
call GetStdHandle
mov hin,eax ; handle de entrada
lea eax,tit
push eax
call SetConsoleTitle
;titulo de la consola
ret
con endp
pinta proc
push NULL; nulo
lea eax,buff; buffer de escritura
push eax; meto el buffer en la pila
push 4;longitud del mensaje
lea eax,msg
push eax; meto la cadena en la pila
push hout;meto en la pila el handle
call WriteConsole
;llamo a la funcion
push NULL
push NULL
push NULL; los parametros son nulos porque no voy a
push NULL; almacenar el dato leido, excepto el handle que
push hin ; es necesario
call ReadConsole
ret
pinta endp
end start
Empiezo a ejecutar y obtengo los handles de E/S de la consola.
Me escribe la palabra hola (esto menos mal que lo hace bien) y espera a que pulse enter, pero en este procedimiento el handle de salida desaparece y en LastError pone ERROR_INVALID_ACCESS.
Cuando regresa a la rutina principal al cerrar los handles, me cierra el handle de entrada pero el de salida no, porque no existe.
FreeConsole y ExitProcess funcionan bien.
Pueden decirme el por qué de estos fallos ? porque estoy buscando info y no consigo averiguarlos.
Creo que el handle de salida de la consola desaparece "solo" porque cumple su funcion y no se va a usar más, pero no estoy muy seguro.
Espero que me puedan aclarar esas dudillas.
Gracias