Главная страница
Библиотека (скачать книги)
Скачать софт
Введение в программирование
Стандарты для C++
Уроки по C#
Уроки по Python
HTML
Веб-дизайн
Ассемблер в среде Windows
ActiveX
Javascript
Общее о Линукс
Линукс - подробно
Линукс - новое
Delphi
Паскаль для начинающих
Турбопаскаль
Новости
Партнеры
Наши предложения
Архив новостей
|
5.10. Применение библиотек динамической
компоновки (DLL)
Библиотеки динамической компоновки (Dynamic Link Libraries — DLL) являются
неотъемлемой и, Пожалуй, наиболее важной частью операционных
систем Windows. Они служат хранилищем многочисленных процедур, в том
числе и функций WIN API, и являются мощным средством для написания
эффективных приложений. Не будем останавливаться на принципах построения
и функционирования DLL, поскольку имеется масса публикаций,
Программирование на ассемблере в Windows: от простого к сложному 401
посвященных этой теме. Гораздо более интересно научиться самому создавать
библиотеки динамической компоновки. Библиотеки DLL, независимо
от того, какими средствами программирования они созданы, могут использоваться
с любыми компиляторами и в любых программах. Посмотрим, как
создаются DLL на языке ассемблера фирмы Microsoft.
DLL-библиотека может быть создана как обычный файл ассемблера. В любой
библиотеке присутствует код инициализации, который может получать
управление в одном из четырех случаев. Нас будет интересовать практическое
применение DLL, поэтому рассмотрим минимальный код, необходимый
для написания библиотек:
.386
.model flat, stdcaii
option casemap :none
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
.code
LibMain proc hlnstDLL:DWORD, reason:DWORD, unused:DWORD
mov EAX, 1
ret
LibMain Endp
End LibMain
Точка входа DLL-библиотеки может иметь любое имя. Представленный
фрагмент кода DLL просто возвращает значение 1 (TRUE). Это простейший
вариант библиотеки DLL. Программист может написать свои процедуры,
используя этот шаблон. Я покажу на примере, как это сделать.
Разработаем DLL, содержащую две процедуры, — сложения двух чисел Sum2
и вычитания Sub2. Исходный текст библиотеки сохраним в файле Sum2.asm.
Нашей конечной целью является создание библиотеки Sum2.dll и демонстрация
рабОТЫ Процедур Sum2 И Sub2.
В качестве входных параметров процедура sum2 принимает значения двух
целочисленных переменных il и i2, а в качестве результата возвращает их
сумму. Процедура Sub2 выполняет вычитание двух целых чисел. Исходный
текст библиотеки приведен в листинге 5.25.
Листинг 5.25. Библиотека DLL,J содержащая процедуры Sum2 и Sub2 ,
. SUM2.ASM
.386
.model flat, stdcaii
option casemap :none
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
. code
LibMain proc hlnstDLL:DWORD, reason:DWORD, unused:DWORD
mov EAX, 1
ret
LibMain Endp
Sum2 proc
push EBP
mov EBP, ESP
mov EAX, [EBP+8] ; здесь находится il
add EAX, [EBP+12] ; здесь находится i2
pop EBP
ret 8
Sum2 endp
Sub2 proc
push EBP
mov EBP, ESP
mov EAX, [EBP+8]
sub EAX, [EBP+12]
pop EBP
ret 8
Sub2 endp
End LibMain
Компиляция и сборка файла DLL обычно выполняется при помощи ВАТ-
файла. Содержимое такого файла может быть, к примеру, таким:
@echo off
if exist Sum2.obj del Sum2.obj
if exist Sum2.dll del Sum2.dll
\masm32\bin\ml /с /coff Sum2.asm
\masm32\bin\Link /SUBSYSTEM:WINDOWS /DLL /DEF:Sum2.def Sum2.obj
dir Sum2.
pause
Естественно, что в каждой конкретной конфигурации операторы файла могут
быть другими. Запустим такой ВАТ-файл на выполнение. Если в исходном
тексте файла Sum2 нет ошибок, то на выходе получим файл библиотеки
с расширением DLL, т. е. Sum2.dll. Обратите внимание, что помимо
Sum2.asm требуется файл Sum2.def. В этом файле описаны процедуры, экспортируемые
из библиотеки DLL. У нас две процедуры, и файл Sum2.def
будет иметь три записи:
LIBRARY Sum2
EXPORTS Sum2
Sub2
<< Назад В начало Далее >> |
|