p>
CalculateSumExport (AppInstance: integer; MethodName: pchar): integer; stdcall; export;: TReturnNextMethodExport;: integer;: = 0;: = 0;: = GetProcAddress (AppInstance, MethodName); N> = 0 do begin: = ReturnNextExport; N> = 0 then Result: = Result + N;
end;;
При запуску цього проекту додаток автоматично завантажує DLL і знаходить адресу методу в DLL CalculateNextExport (який експортується по імені SumExport). Завантажена DLL в якості параметрів отримує заголовок модуля програми та ім'я методу, під яким [U4] він експортується у додатку. Далі DLL використовує метод GetProcAddress для знаходження адреси методу, експортованого додатком. Для того щоб було повернуто адресу методу, у додатку оголошується секція exports, де описано зовнішнє ім'я методу. Цей приклад показує формально однакові структуру і спосіб формування *. Exe-та *. Dll-файлів. br/>
Немодальні форми в DLL
Показ немодального форм традиційно здійснюється зі статичної завантаженням DLL. Ось типовий код для показу немодального форми в DLL:
procedure ShowNonModalForm (AppHandle: THandle); stdcall; export;. Handle: = AppHandle; TForm1.Create (Application) do Show;
end;
Як і при показі модальних форм, необхідно присвоїти дескриптор вікна головного додатки додатком, створюваному в DLL, - інакше на панелі завдань будуть показані дві іконки. Потім просто створюється форма і викликається її метод Show. Такий спосіб показу немодального форм призводить до того, що з головного додатки можна неодноразово викликати даний метод і тим самим створити кілька примірників форм. Найчастіше це виправдано, оскільки однакові типи форм можуть містити, наприклад, різні документи. Але при цьому способі показу рекомендується зробити обробник події OnClose для TForm1 і привласнити параметру CloseAction значення caFree - в іншому випадку при закритті форма буде захована [NE5] [U6] на екрані без звільнення системних ресурсів. p align="justify"> Для показу єдиного примірника немодального форми слід трохи змінити код:
procedure ShowSingleNonModalForm (AppHandle: THandle); stdcall; export;. Handle: = AppHandle; Assigned (Form2) then Form2.Show else begin: = TForm2.Create (Application);. Show; p>
end;;
Спочатку необхідно перевірити, чи була створена форма раніше. Якщо була - просто викликається її метод Show; якщо ні - викликається той же метод після відпрацювання конструктора. Виклик методу Show для вже створеного екземпляра форми має сенс, оскільки користувач може звернутися до команди показу форми в тих випадках, коли вже наявний примірник перекритий іншими вікнами і непомітний на екрані, - використання команди Show призводить до спливання форми. Мінлива Form2 є глобальної змінної. p align="justify"> ...