GetNum proto
PrintNum proto Number :DWORD
WriteLine proto
BSIZE equ 12
.data
hInst dd 0
stdin dd 0
stdout dd 0
rdn dd 0
wrtn dd 0
buff db BSIZE DUP (0)
msg db "Enter num:"
MS equ $ - msg
dline db ‘=============================================‘, 13, 10
LS equ $ - dline
.code
; точка входу в бібліотеку
DllEntry proc instance :DWORD, reason :DWORD, unused :DWORD
mov eax, reason ; причина виклику – в еах
cmp eax, DLL_PROCESS_ATTACH ; підключення до процесу?
jnz _m1 ; немає – перехід на м1
push instance ; зберегти
pop hInst ; отриманий дескриптор модуля
invoke FreeConsole ; звільнити консоль процесу (якщо є)
invoke AllocConsole ; створити нову консоль для процесу
invoke GetStdHandle, STD_INPUT_HANDLE ; отримати стандартний
; дескриптор введення
mov stdin, eax ; зберегти його
invoke GetStdHandle, STD_OUTPUT_HANDLE ; отримати стандартний
; дескриптор виведення
mov stdout, eax ; зберегти його
jmp _exit ; на вихід
_m1: ; наступна перевірка
cmp eax, DLL_PROCESS_DETACH ; процес знищений?
jnz _exit ; немає – на вихід, решту всіх випадків не розглядаємо
invoke FreeConsole ; знищити консоль
_exit:
and eax, 1 ; завжди потрібно повертати 1 (TRUE)
ret ; вихід
DllEntry endp
; читання числа з консолі