stdc all;
ReceiveCloseNotify; stdcall;. ProcessMessages; (Form1.Handle, WM_DLLUNLOAD, 0,0);;
TForm1.WMDLLUnload (var Message: TMessage);. ProcessMessages; FHLib> HINSTANCE_ERROR then FreeLibrary (FHLIB);: = 0; ('Library unloaded');;
TForm1.Button3Click (Sender: TObject);: TDynNonmodal; FHLIB <= HInstance_Error then FHLib: = LoadLibrary ('NMDyn1.dll'); FHLib> HInstance_Error then begin: = GetProcAddress (FHLib, 'DynNonmodal '); Assigned (DM) then DM (Application.Handle, @ ReceiveCloseNotify);
end;;
Очевидно, що код виходить досить громіздким: у головному додатку необхідно реалізовувати три методи замість одного. Альтернативний варіант можна запропонувати виходячи з того, що в DLL мається об'єкт TApplication, який може підтримувати цикл вибірки повідомлень. Але в DLL не можна створити форму, використовуючи метод TApplication. CreateForm, так як відповідна закладка діалогу Project/Options/Forms відсутній у проектах Delphi 4 і 5 і неактивна в Delphi 3. Однак можна викликати всі методи об'єкта Tapplication, вручну дописавши відповідний код в DLL:
procedure ShowNMApplication; stdcall; export; Assigned (Form1) then begin. Show;; else begin. Initialize;. CreateForm (TForm1, Form1);. Run;. Free;: = nil;;;
Слід звернути увагу, що дескриптор головного додатки не присвоюється в даному проекті дескриптору TApplication в DLL. Це реально призводить до появи двох піктограм на панелі додатків. Правда, в деяких випадках це корисно - так легше дістатися до перекритих вікон. Цікаво відзначити, що в Delphi 3 після написання даного коду стають доступними елементи керування діалогу Project/Options/Forms, де можна визначити автоматично створювані форми і головну форму додатку. Код головного додатки, використовує дану DLL, такий:
type
TShowApp = procedure; stdcall;
procedure TForm1.Button4Click (Sender: TObject);: THandle;: TShowApp;: = LoadLibrary ('NMDyn2.dll'); HLib> HINSTANCE_ERROR then begin: = GetProcAddress (HLib, 'ShowNMApplication') ; Assigned (ShowApp) then ShowApp;. ProcessMessages; (HLib);;;
На відміну від попереднього прикладу, динамічне завантаження DLL і її вивантаження здійснюються в одному методі, та й обсяг написаного коду істотно менше.
Висновок
За допомогою динамічно завантажуваних бібліотек можна оптимізувати ресурси, необхідні для виконання додатків; використовувати у проектах модулі, написані на різних мовах програмування; створювати проекти, які можуть мати необов'язкові функції і пункти меню. Виклик методів з DLL не представляє труднощів, за винятком того, що слід звертати особливу увагу на виняткові ситуації: не допускати попад...