Стрельба в цель упражняет руку и причиняет верность глазу.
Козьма Прутков
Динамические подключаемые библиотеки (Dynamic Link
Libraries, DLLs) являются хранилищем общедоступных процедур. Механизм
DLL-библиотек появился вместе с операционной системой Windows и является
ее неотъемлемой частью. Суть этого механизма в том, что в процессе
компоновки исполняемого модуля с использованием внешних процедур в него
помещаются не сами процедуры, а только их названия (номера) вместе с
названиями DLL-библиотек, в которых они содержится. В уроке 14
«Модульное программирование» учебника для связи модулей на разных языках
рассматривались стандартные соглашения по передаче параметров, которые
специфическим образом реализовывались на уровне конкретных компиляторов
языков программирования. Этот механизм был, пожалуй, единственным
средством связи разноязыковых модулей при программировании для MS DOS. В
среде Windows более естественным является механизм DLL-библиотек. Он
позволяет, в частности, разработать набор процедур на ассемблере и затем
использовать их в программах на языках высокого уровня, поддерживающих
механизм динамического связывания.
Как правило, если язык программирования поддерживает разработку
Windows-приложений, то он имеет средства для разработки и использования
DLL-библиотек. Ассемблер не является исключением. Общие принципы
разработки DLL-библиотек для всех языков одинаковы, так как эти
библиотеки являются универсальным механизмом, не зависящим от
конкретного языка. Поэтому, разрабатывая DLL-библиотеку, необходимо
учитывать общие требования к таким библиотекам. Структурно
DLL-библиотека представляет собой обычную программу, включающую
некоторые специфические элементы. Рассмотрим процесс создания и
использования DLL-библиотеки на языке ассемблера. Для этого разработаем
консольное приложение, которое выводит некоторую строку на экран 10 раз.
На каждой итерации вывода меняются атрибуты этой строки. За основу
взята программа prg05_ll.asm из главы 5. Только теперь строка с
выводимым сообщением находится в приложении, а сама процедура вывода — в
DLL-библиотеке. Для демонстрации передачи и возврата параметров в
процедуру передаются длина и адрес строки, а возвращаются значения
Offffffffh в четыре регистрах ЕАХ, ЕВХ, ЕСХ, EDX. Обсудим процесс по
шагам.