Assembler & Win32 - Пример 2
Динамическая библиотека

Написание динамических библиотек под Win32 также значительно упростилось, по сравнению с тем, как это делалось под Windows 3.x. Исчезла необходимость вставлять startup код, а использование четырёх событий инициализации/деинициализации на уровне процессов и потоков, кажется логичным.

Рассмотрим простой пример динамической библиотеки, в которой всего одна функция, преобразования целого числа в строку в шестнадцатеричной системе счисления.

Файл mylib.asm

Ideal
P586
Radix 16
Model flat
DLL_PROCESS_ATTACH = 1 extrn GetVersion: proc DataSeg
hInst dd 0
OSVer dw 0
CodeSeg
proc  libEntry stdcall
arg @@hInst :dword, @@rsn :dword, @@rsrv :dword
cmp [@@rsn],DLL_PROCESS_ATTACH
jne @@1
call GetVersion
mov [OSVer],ax
mov eax,[hInst]
mov [hInst],eax
@@1: mov eax,1
ret
endP libEntry
public stdcall Hex2Str
proc Hex2Str stdcall
arg @@num :dword, @@str :dword
uses ebx
mov eax,[@@num]
mov ebx,[@@str]
mov ecx,7
@@1: mov edx,eax
shr eax,4
and edx,OF
cmp edx,OA
jae @@2
add edx,'0'
jmp @@3
@@2: add edx,'A' - 0A
@@3: mov mov [byte ebx + ecx],dl
dec ecx
jns @@1
mov [byte ebx + 8],0
rec
endp Hex2Str
end libEntry

Остальные файлы, которые необходимы для данного примера, можно найти в Приложении 2.

Сайт Alexus Software Development