Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОС_Лаб5.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.38 Mб
Скачать

Лабораторна робота № 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-бібліотеку.