Написание динамических библиотек
под Win32 также значительно упростилось,
по сравнению с тем, как это делалось под
Windows 3.x. Исчезла необходимость вставлять
startup код, а использование четырёх событий
инициализации/деинициализации на уровне
процессов и потоков, кажется логичным.
Рассмотрим простой пример
динамической библиотеки, в которой всего
одна функция, преобразования целого числа
в строку в шестнадцатеричной системе счисления.
Файл mylib.asm
Ideal
P586
Radix 16
Model flat
DLL_PROCESS_ATTACH = 1
extrn GetVersion: proc
DataSeg
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.
|