викликається метод; при цьому не використовуються регістри процесора для передачі даних. Цим умовам задовольняє директива stdcall. Якщо після заголовка методу відсутня угода про виклик, то за замовчуванням Delphi використовує угоду register. p align="justify"> Друге службове слово в заголовку методу - export - інформує компілятор про те, що код для даного методу має бути створений таким чином, щоб його можна було викликати з інших модулів. Ця директива потрібно при реалізації DLL в Delphi 3; в Delphi 4 і 5 її можна опустити. p align="justify"> Для того щоб зовнішній модуль міг вибрати конкретний метод, в DLL має бути присутня спеціальна секція, яка має заголовок exports.
Для експонування методу в секції exports просто наводиться його назва, після якого слід або службове слово index з цілочисловим ідентифікатором після нього (ідентифікатор повинен бути більше нуля), або службове слово name з текстовим ідентифікатором, або обидва разом . Зовнішній модуль може звертатися до конкретного методу як за індексом, так і по імені. br/>
Статична і динамічна завантаження DLL
Модуль може викликати методи іншого модуля, а той, у свою чергу, - наступного і т.д. Наприклад, додаток викликає DLL, а ця DLL викликає методи інший DLL: так можна формувати довгі ланцюжки викликів. Для виклику методу з іншого модуля необхідно спочатку завантажити його в пам'ять, а потім визначити адресу методу. Існує два способи завантаження і визначення адреси методу - статичний і динамічний. p align="justify"> При статичній завантаженні для виклику іншого модуля слід в якійсь із секцій описати метод з DLL наступним чином:
function Add1 (K: integer): integer; stdcall; external 'FirstLib.dll' name 'CalculateSum';
або
function Add1 (K: integer): integer; stdcall; external 'FirstLib.dll' index 1;
При такому визначенні методу DLL буде завантажена негайно після старту програми та вивантажено разом з його завершенням. У наведеному вище прикладі слід звернути увагу на те, що після імені динамічної бібліотеки вказано її розширення (FirstLib.dll). Така конструкція необхідна для завантаження бібліотеки в Windows NT, оскільки без розширення *. Dll файл не буде знайдений! У Windows 95 розширення не обов'язково. p align="justify"> При пошуку DLL для завантаження спочатку визначається, чи була дана DLL вже завантажена в пам'ять іншим модулем. Якщо була - то витягується адресу методу і передається додатком. Якщо ж ні - то операційна система починає її пошук на диску. При цьому, якщо шлях при імені DLL не зазначений в явному вигляді, система шукає бібліотеку в каталозі модуля, який намагається завантажити DLL. Якщо не знаходить, то продовжує пошуки в директоріях WINDOWS і WINDOWS SYSTEM (або WINNT, WINNT SYSTEM, WINNT SYSTEM32). Після цього відбувається ...