Ассемблер и Win32



               

  

Динамическая библиотека


Написание динамических библиотек под 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,0F

              cmp    edx,0A

              jae    @@2

              add    edx,'0'

              jmp    @@3

@@2:          add    edx,'A' - 0A

@@3:          mov    [byte ebx + ecx],dl

              dec    ecx

              jns    @@1

              mov    [byte ebx + 8],0

              ret

endp   Hex2Str

end    libEntry

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



Содержание  Назад  Вперед





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