
- •Лабораторна робота № 5.
- •Теоретичні відомості.
- •Хід виконання роботи.
- •1. Створення проекту dll-бібліотеки.
- •2. Написання коду програми.
- •3. Побудова dll-бібліотеки.
- •4. Створення програми, у якій буде використовуватись dll-бібліотека.
- •Варіанти для індивідуальної роботи.
- •Висновки.
- •Контрольні запитання.
Лабораторна робота № 5.
Тема: Динамічно під’єднувані бібліотеки (DLL).
Мета: Ознайомитись з методикою створення та використання dll-бібліотеки.
Теоретичні відомості.
Динамічно під’єднувана бібліотека (DLL, Dynamic Link Library ) являє собою програмний модуль, який може бути багаторазово використаний різними програмними додатками.
Використовується в операційних системах Microsoft Windows. До DLL відносяться також елементи управління ActiveX та драйвери.
Програмний модуль, оформлений у вигляді DLL, зберігається на диску у вигляді файлу, який має розширення dll, і може містити як функції, так і дані.
Динамічно під’єднувані бібліотеки призначені, головним чином, для розробки функціонально - замкнутих бібліотек функцій, які можуть використовуватися різними додатками. Це дозволяє знизити витрати на розробку програмного забезпечення, оскільки один і той же програмний код може використовуватися різними розробниками. Крім того, спільні бібліотеки дозволяють зменшити обсяг використовуваної фізичної пам'яті при одночасній роботі декількох програм, які використовують одну і ту ж бібліотеку.
Динамічні бібліотеки можуть бути використані різнотипними додатками - наприклад, Microsoft Office, Microsoft Visual Studio і т. п.
(!!!) При використанні програмами DLL різних версій можуть виникати конфлікти. Таке явище у програмуванні називається “DLL Hell” (“DLL пекло”), оскільки при постійній зміні версій бібліотек дуже важко налагодити стабільну роботу усіх програм, які використовують функції з цієї бібліотеки.
Тепер розглянемо, як оформляються функції та змінні, які DLL надає в користування своїм клієнтам.
В DLL головна функція називається DllMain і викликається операційною системою при завантаженні DLL в адресний простір процесу.
В інших файлах записується реалізація тих функцій, які будуть доступні іншим програмам.
Такі функції і змінні називаються експортованими. Для того щоб зробити функцію або змінну експортованою, потрібно визначити їх з модифікаторів extern "С" і кваліфікатором __declspec(dllexport).
Наприклад:
// довжина сторони трикутника
extern "C" __declspec (dllexport) double dist(double x_p, double y_p, double x_k, double y_k)
{
return sqrt( pow((x_k - x_p), 2) + pow((y_k - y_p), 2) );
}
Модифікатор extern "С" вказує компілятору на те, що функція або змінна повинна мати ім'я в стилі мови програмування С. Тобто ім'я функції або змінної не буде спотворюватися шляхом додавання до нього позначень типів даних з сигнатури функції або визначення змінної. Модифікатор __declspec(dllexport) вказує компілятору на те, що дана функція або змінна буде експортуватися з DLL.
Існує 2 методи завантаження DLL:
Динамічний,
Статичний.
У даній роботі розглянемо статичний.
Статичне завантаження DLL відрізняється від динамічного тим, що виконується на етапі компоновки виконуваного модуля, а не на етапі його виконання. Для цього компонувальник використовує бібліотеку імпорту. Бібліотека імпорту – це файл з розширенням lib, який створюється компоновщиком при створенні динамічної бібліотеки. У бібліотеці імпорту містяться посилання на всі експортуються з динамічної бібліотеки імена.
Відзначимо, що функції, які імпортуються з DLL повинні мати модифікатор extern і кваліфікатор __declspec(dllimport).
Наприклад:
// довжина сторони трикутника
extern "C" __declspec(dllimport) double dist(double x_p, double y_p, double x_k, double y_k);
Постановка задачі:
Задано координати вершин трикутника: (х1, у1), (х2, у2), (х3, у3). Обчислити радіус кола, вписаного в трикутник та радіус кола, описаного навколо трикутника. Написати програму для реалізації обчислень. Створені функції для реалізації геометричних формул виділити в dll-бібліотеку.