Ассемблер для Windows


         

Простейшая DLLбиблиотека



Рисунок 3.3.2. Простейшая DLL-библиотека.

Программа на Рисунок 3.3.2 может быть оттранслирована как с помощью MASM32, так и TASM32 (см. ниже). На этом стоит остановиться более подробно. Прежде всего обратите внимание, что за процедурой, вызываемой из другого модуля, мы указали ключевое слово EXPORT. Это слово необходимо для правильной трансляции в MASM. Для TASM этого не нужно, но, к счастью, этот транслятор просто не замечает наличия какого-либо слова после PROC. Зато для TASM процедура DLLP1 должна быть определена как PUBLIC, кроме того, для трансляции в пакете TASM необходимо подготовить DEF-файл и указать его в командной строке TLINK32. Для создания динамических библиотек в строке link следует указать ключ /DLL, а в строке tlink32 -Tpd (no умолчанию работает ключ -Tpe). Ключ /ENTRY:DLLENTRY в строке link можно опустить, так как точка входа определяется из директивы END DLLENTRY.

Трансляция динамической библиотеки на Рисунок 3.3.2.

MASM32.

ml /c /coff /DMASM dll1.asm link /subsystem:windows /DLL /ENTRY:DLLENTRY dll1.obj

TASM32.

tasm32 /ml dll1.asm tlink32 -aa -Tpd dll1.obj,,,,dll1.def

Содержимое dll1.def:

EXPORTS DLLP1

Ниже на Рисунок 3.3.3 представлена программа, которая загружает динамическую библиотеку, показанную на Рисунок 3.3.2. Это пример позднего связывания. Библиотека должна быть вначале загружена при помощи функции LoadLibrary. Затем определяется адрес процедуры с помощью функции GetProcAddress, после чего можно осуществлять вызов. Как и следовало ожидать, MASM помещает в динамическую библиотеку вместо DLLP1 имя _DLLP1@0, тогда как TASM помещает имя без искажения. Это мы учитываем в нашей программе. Мы учитываем также возможность ошибки при вызове функций LoadLibrary и GetProcAddress. В этой связи укажем, как (в какой последовательности) ищет библиотеку функция LoadLibrary:

  1. Поиск в каталоге, откуда была запущена программа.
  2. Поиск в текущем каталоге.
  3. В системном директории (GetSystemDirectory).
  4. В директории Windows (GetWindowsDirectory).
  5. В каталогах, указанных в окружении (PATH).



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