Завантаження DLL в додатку Delphi, DelphiSite

Найбільш читане

Завантаження DLL в додатку Delphi

Пропоную вашій увазі черговий випуск розсилки, в якому я продовжую обговорювати питання розробки та використання DLL у Borland Delphi. Для нових передплатників повідомляю, що першу частину статті вони можуть подивитися в архіві розсилки, випуск номер 13. Прошу вибачення у тих, хто писав мені, але не отримав відповіді. Найближчим часом намагатимусь це виправити. Отже, продовжимо.

DLLInstance := LoadLibrary ( 'myfirstdll.dll') ;

@HelloWorld := GetProcAddress (DLLInstance, 'HelloWorld') ;

Як уже говорилося вище, одним з недоліків статичного завантаження DLL є неможливість продовження роботи програми за відсутності однієї або декількох бібліотек. У випадку з динамічним завантаженням у вас з'являється можливість програмно обробляти такі ситуації і не допускати, щоб програма вивалювалася самостійно. За значеннями LoadLibrary і GetProcAddress, що повертаються функціями, можна визначити, чи успішно пройшло завантаження бібліотеки і чи знайдена в ній необхідна програмі процедура. Наведений нижче код показує це.

procedure TForm1. DynamicLoadBtnClick (Sender: TObject);

THelloWorld = procedure (AForm: TForm);

DLLInstance := LoadLibrary ( 'myfirstdll.dll') ;

якщо DLLInstance = 0 then begin

MessageDlg ( 'Неможливо завантажити DLL', mtError, [mbOK], 0);

@HelloWorld := GetProcAddress (DLLInstance, 'HelloWorld') ;

if @HelloWorld nil then

MessageDlg ( 'Не знайдена потрібна процедура!.', mtError, [mbOK], 0);

У DLL можна зберігати як код, а й форми. Причому створення та поміщення форм у динамічну бібліотеку не надто сильновідрізняється від роботи з формами у звичайному проекті. Спочатку ми розглянемо, яким чином можна написати бібліотеку, яка містить форми, а потім ми поговоримо про використання технології MDI в DLL. Розробку DLL, що містить форму, я продемонструю на прикладі. Отже, по-перше, створимо новий проект динамічної бібліотеки. Для цього виберемо пункт меню FileNew, а потім двічі клацніть на іконку DLL. Після цього ви побачите приблизно такий код: