пошук в каталогах, визначених у змінній середовища Path. Якщо бібліотека з заданим ім'ям буде знайдена, то вона завантажиться і додаток стартує. Якщо ж ні - відбувається виключення і додаток припинить свою роботу. Додаток припиняє роботу також і в тому випадку, якщо не буде знайдений метод з даними ім'ям (або індексом, якщо він імпортується за індексом). p align="justify"> Динамічне завантаження DLL дозволяє завантажувати бібліотеку тільки в той момент, коли вона потрібна. Крім того, якщо не буде знайдена бібліотека або метод, то це можна проаналізувати і запустити додаток і в цьому випадку. Звичайно, в такій ситуації слід інформувати користувача про неможливість викликати метод з DLL - наприклад, зробивши невидимим пункту меню, який звертається до даного методу. Приклад динамічного завантаження DLL виглядає наступним чином:
= function (K: integer): integer; stdcall;
procedure TForm1.Button2Click (Sender: TObject);: TAddFunction;: THandle;: integer;: = 0;: = LoadLibrary ('FirstLib.dll'); HLib> HINSTANCE_ERROR then begin: = GetProcAddress (HLib, 'CalculateSum'); Assigned (Add1) then begin: = StrToInt (Edit1.Text);: = Add1 (N);. Text: = IntToStr (N); else ShowMessage ('Method with name CalculateSum was not found '); else ShowMessage (' Can not load library FirstLib.dll '); HLib> HINSTANCE_ERROR then FreeLibrary (HLib);
end;;
Спочатку визначається новий процедурний тип, наприклад TAddFunction, який має такий же список параметрів і такі ж домовленості виклику, що і метод в DLL. Delphi в процесі компіляції програми ніяк не може перевірити відповідність процедурного типу методом, що викликається з DLL. Перевірка може бути здійснена тільки під час виконання, а при невідповідності формальних параметрів або неврной зазначеної домовленості виклику відбувається крах стека, що програміст виявить дуже швидко. p align="justify"> Далі в коді програми викликається метод LoadLibrary, який у якості параметра використовує ім'я бібліотеки. Після успішної відпрацювання даного методу і завантаження бібліотеки в пам'ять покажчик на завантажену бібліотеку поміщається в змінну HLib. Якщо бібліотеки не вдається знайти (або завантажити), то в цю ж змінну поміщається код помилки. Щоб визначити, чи була завантажена бібліотека, змінну HLib слід порівняти з константою HINSTANCE_ERROR, яка визначена в модулі Windows. Якщо бібліотека була успішно завантажена, то здійснюється спроба знайти адресу методу в пам'яті комп'ютера за допомогою виклику методу GetProcAddress. Зазначений метод повертає адресу того методу, ім'я якого зазначено в другому параметрі GetProcAddress. Якщо ж метод не був знайдений, то повертається nil-адресу. p align="justify"> Відповідно виклик методу Add1 здійснюється тільки у разі, якщо він був успішно знайдений. Потім, оскільки при завантаженні бібліотеки були зайняті си...