
- •1. Основні терміни технології програмування
- •2. Класифікація програмного забезпечення
- •Поняття життєвого циклу розробки програмного забезпечення.
- •Етапи розробки
- •Базові моделі розробки програмних продуктів.
- •Вимоги до методології та технології розробки пп
- •Каскадна модель
- •3. Модель прототипування програмного продукту
- •4. Спіральна модель
- •5. Модель rad
- •6. Модель екстремального програмування (xp)
- •7. Модель msf (Microsoft Solutions Framework)
- •Принципи й види налагодження.
- •Аксіоми налагодження.
- •Автономне налагодження модуля.
- •Комплексне налагодження програмного засобу.
- •Інструменти розробки програмних засобів.
- •Інструментальні середовища розробки й супроводу програмних засобів.
- •Інструментальні середовища програмування.
- •Поняття комп'ютерної технології розробки програмних засобів і її робочі місця.
- •Інструментальні системи технології програмування.
- •Приклад реалізації класу Log.
- •Розробка програмного продукту з двома потоками
- •Визначення крапок контролю програмного продукту.
- •Визначення кількості викликів
- •Визначення ступеня покриття
- •Фундаментальні проблеми профілювання.
- •Причини рефакторингу
- •Підстави для проведення рефакторингу
- •Прийоми рефакторингу
- •Автоматизований рефакторинг
- •1. Принципи повторного використання елементів програм
- •2. Створення шаблонів форм у вигляді файлів
- •3. Використання шаблонів форм у новому проекті
- •4. Збереження шаблонів форм в депозитарії
- •5. Використання шаблонів форм із депозитарію
- •Шаблони класів на мові програмування с#.
- •Приклади шаблонів (класів шаблонів).
- •1. Використання підпрограм в оброблювачах подій
- •2. Звертання до активного компонента не за ім’ям
- •2. Обробка групи компонентів
- •4. Обробка компонентів як масиву
- •5. Сортування даних у компонентах
- •1. Принципи модульного програмування
- •2. Принцип «приховання даних»
- •3. Поняття модуля в Object Pascal
- •4. Структура модульного файлу
- •5. Створення модуля в Object Pascal
- •6. Створення модуля з переліком стандартних діалогів
- •7. Використання текстових констант у модулях
- •8. Створення підпрограм для обробки компонентів
- •1. Поняття dll
- •2. Створення dll бібліотеки в Delphi
- •3. Внесення форм в dll
- •4. Використання dll бібліотеки
- •Питання для самоконтролю
- •Використання регулярних виразів у програмах.
- •1. Призначення зовнішніх компонентів
- •2. Установка й видалення зовнішніх компонентів
- •3. Установка й видалення бібліотек компонентів
- •4. Запуск зовнішніх програм і файлів
- •Питання для самоконтролю
- •1. Загальні принципи технології com
- •2. Робота з com-сервером Microsoft Word
- •Робота з документами в Microsoft Word
- •Використання шаблону для формування документів
- •Робота з таблицями
- •Вставка малюнків і їх форматування
- •1. Операції з Com-Сервером Microsoft Excel
- •Робота із книгами в Microsoft Excel
- •Робота з аркушами книги в Microsoft Excel
- •Використання шаблону для формування книги
- •Формування таблиці
- •6. Форматування чарунок
- •Види довідкових систем
- •Інші засоби підтримки користувача
- •2.Формати довідників
- •3.Створення довідки у форматі html Help
- •4.Створення контекстної довідки
- •5.Інтеграція довідкового файлу в додаток
- •Перелік шаблонів, що породжують
- •Перелік структурних шаблонів
- •Перелік шаблонів поведінки
- •Призначення патерну Singleton
- •Реалізація патерну Singleton
- •Результати застосування патерну Singleton
- •Призначення патерна Observer
- •Постановка проблеми, що вирішується за допомогою патерна
- •Структура патерна Observer
- •Приклад патерна Observer
- •Реалізація патерна Observer
- •Реалізація патерну Observer: до та після
- •Призначення патерну Strategy
- •Опис патерну Strategy
- •Реалізація патерну Strategy
- •Призначення патерна Factory Method
- •Опис патерну Factory Method
- •Реалізація патерна Factory Method
4. Використання dll бібліотеки
Статичне зв'язування
Створимо тестовий додаток для DLL, розробленої в попередньому розділі. Будемо використовувати при цьому статичне зв'язування.
Нехай є форма виду:
При закритті форми видати запит на вихід за допомогою функції exit.
Для кнопки спочатку видати діалог на введення пароля за допомогою функції parol . Якщо пароль вірний, то підраховується сума двох перші полів і результат записується в третє поле за допомогою функції sum.
На початку відразу після ключового слова Implementation додатка вводять оголошення процедур і функцій, імпортованих з DLL. Кожне оголошення повністю повторює відповідне оголошення в бібліотеці, і завершується специфікатором external, після якого в лапках вказується ім'я DLL файлу. Це все, що потрібно для статичного зв'язування.
implementation
function exit:boolean; stdcall; external 'primer.dll';
function sum(a,b:real):real; stdcall; external 'primer.dll';
function parol:string; stdcall; external 'primer.dll';
Подальше використання імпортованих функцій не відрізняється від використання будь-яких інших функцій.
Для виходу з форми в події форми Onclosequery напишемо код:
procedure Tform1.Formclosequery(Sender: Tobject; var Canclose: Boolean);
begin
canclose:=exit;
end;
Для кнопки Button1 напишемо код:
procedure Tform1.Button1Click(Sender: Tobject);
begin
//якщо пароль рівний 1111
if parol='1111' then
edit3.Text:=floattostr(sum(strtofloat(edit1.Text),strtofloat(edit2.Text)));
end;
У наведених прикладах малося на увазі, що файл DLL розташований у тій же туці, з якої запускається додаток, або в одному із системних каталогів Windows, або в каталозі, зазначеному в змінній оточення PATH. Якщо це не так, то в специфікації external треба вказати повний шлях до файлу бібліотеки. Але, звичайно, у цьому випадку додаток неможливий буде перенести на комп'ютер з іншим розташуванням каталогів. Так що зазначення повного шляху, як правило, недоцільно. Краще, передаючи додаток і DLL користувачеві, указати, що файл DLL повинен розташовуватися в системному каталозі. А ще краще, якщо програма установки вашого додатка (інсталятор) сама розмістить файли там, де потрібно.
Динамічне зв'язування
Динамічне зв'язування в додатках здійснюється складніше статичного зв'язування.
Динамічне зв'язування можна розбити на три етапи. Насамперед, треба завантажити бібліотеку функцією Loadlibrary API Windows. Потім за допомогою функції Getprocaddress треба отримати покажчики на функції бібліотеки, які вам потрібні. Тільки після цього можна викликати бібліотечні функції.
Подивимося, як це все реалізується на практиці на прикладі primer.dll, створеної в попередніх розділах.
У наведеному коді вводяться чотири глобальні змінні. Змінна Н використовується для зберігання дескриптора завантаженої бібліотеки. Змінні exit, sum і parol використовуються для зберігання адрес процедури й функцій бібліотеки. У якості типів цих змінних використовуються заголовки процедури й функцій бібліотеки.
var
h:thandle=0;
exit:function:boolean; stdcall;
sum:function(a,b:real):real; stdcall;
parol:function:string; stdcall;
Для форми в події Onclosequery напишемо код виду:
procedure Tform1.Formclosequery(Sender: Tobject; var Canclose: Boolean);
begin
//якщо файл dll існує
if fileexists('primer.dll')=true then
begin
//завантажуємо dll у пам’ять
h:=loadlibrary('parol.dll');
//знаходимо в dll потрібну підпрограму
exit:=getprocaddress(h,'exit');
//викликаємо знайдену підпрограму
canclose:=exit;
end;
end;
Для кнопки Button1 напишемо код:
procedure Tform1.Button1Click(Sender: Tobject);
begin
//якщо файл dll існує
if fileexists('primer.dll')=true then
begin
//завантажуємо dll у пам’ять
h:=loadlibrary('parol.dll');
//знаходимо в dll потрібні підпрограми
parol:=getprocaddress(h,'parol');
sum:=getprocaddress(h,'sum');
//викликаємо знайдені підпрограми
if parol<>'1111' then
edit3.Text:=floattostr(sum(strtofloat(edit1.Text),strtofloat(edit2.Text)));
end;
end;