Public WriteLine

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

; читання числа з консолі