Cтворення dll та їх використання при неявному зв’язуванні на мові с

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
ІКТА
Факультет:
КН
Кафедра:
Кафедра ЕОМ

Інформація про роботу

Рік:
2016
Тип роботи:
Лабораторна робота
Предмет:
Системне програмування та операційні системи

Частина тексту файла

Міністерство освіти і науки Національний університет «Львівська політехніка» Кафедра ЕОМ Звіт до лабораторної роботи № 6 з дисципліни: “Системне програмування” на тему: Cтворення dll та їх використання при неявному зв’язуванні на мові с Варіант - 19 СТВОРЕННЯ DLL ТА ЇХ ВИКОРИСТАННЯ ПРИ НЕЯВНОМУ ЗВ’ЯЗУВАННІ НА МОВІ С Мета: Ознайомитись з технологією та оволодіти навиками створення та використання бібліотек динамічного компонування з використанням неявного зв’язування. ТЕОРИТИЧНІ ВІДОМОСТІ: Використання DLL у Windows Загальні бібліотеки функцій в ОС Windows реалізовані компанією Microsoft за DLL технологією. Як правило, ці бібліотеки мають розширення файлу *.dll, *.ocx (для бібліотек, що містять елементи керування ActiveX) або *.drv (драйвери старих версій ОС). DLL може містити 2 типи функцій: експортні та внутрішні. Експортні функції можуть бути викликані зі зовнішніх прикладних та визначаються за допомогою ключового слова __declspec(dllexport). Внутрішні – це функції, які використовуються в середині DLL і не можуть бути викликані ззовні. DLL є модулем (module). Тобто, вона складається з: сегментів коду, сегментів ресурсів та одного сегменту даних. Крім цього DLL може містити точку входу. Точка входу – це функція DllMain, яка викликається при завантаженні або вивантажені бібліотеки потоком або процесом. Якщо DllMain повертає FALSE, то бібліотека вважається такою, що не завантажилася. При неявному зв’язуванні це призведе до відмови запуску програми, а при явному – помилки завантаження лише цієї бібліотеки. У процесі виконання вміст бібліотеки залишається незмінним (сегменти коду та сегменти ресурсів), що дозволяє завантажувати її в пам’ять в єдиному примірнику і використовувати багатьма завданнями одночасно. Використання dll дозволяє економити пам’ять, забезпечити модульність програм, полегшити процес встановлення програм. Можливі 2 способи використання динамічних бібліотек. Вони називаються “явним” та “неявним” зв’язуванням. “Явне” та “неявне” зв’язування бібліотеки з програмою мають суттєві відмінності в процесі написання та компіляції програми. Неявне зв’язування бібліотеки з програмою (Load-time dynamic linking) полягає в тому, що бібліотека (яка міститься у файлі з розширенням .dll) завантажується в пам’ять в момент завантаження програми. При відсутності бодай однієї з бібліотек при запуску програми відбудеться збій та припинення виконання програми. Щоб реалізувати неявне зв’язування необхідно до проекту програми включити прототипи функцій, що містяться в бібліотеці та бібліотеку імпорту (має розширення .lib). На даному етапі наявність файлу з розширенням .dll не є необхідною. При компоновці створюється виконавчий файл, який містить код, що забезпечує систему інформацією, яка необхідна для автоматичного завантаження бібліотеки з .dll файлу та інформацією, яка необхідна для зв’язування імен функцій у програмі з їх адресами у бібліотеці. Неявне зв’язування дозволяє здійснювати виклик функцій з бібліотеки написанням коду програми в стилі притаманному мовам С\С++. ЗАВДАННЯ Створити функцію в бібліотеці DLL, яка виконуватиме завдання відповідно до варіанту. ВАРІАНТ ЗАВДАННЯ: Підрахувати, скільки букв треба виправити в слові Х, щоб вийшло слово Y (Х і Y- слова однакової довжини). КОД ВИКОНАВЧОЇ ПРОГРАМИ: Файл(main.cpp) #include <iostream> #include <stdio.h> #include "../myDll/Header.h" using namespace std; void main() { char str1[100]; printf("Enter word X: "); cin >> str1; char str2[100]; printf("Enter word Y: "); cin >> str2; cout << LetterCounter(str1,str2) << endl; } КОД БІБЛІОТЕКИ DLL: Файл(Header.h) #pragma once #include <iostream> #include <stdio.h> extern "C" __declspec(dllexport) int LetterCounter(char str1[], char str2[]); Файл(myDll.cpp) #include "Header.h" extern "C" __declspec(dllexport) int LetterCounter(char str1[], char str2[]) { int count = 0; if (strlen(str1) != strlen(str2)) { printf("Error, enter the same length "); return 0; } for (int i = 0; i < strlen(str1); i++) ...
Антиботан аватар за замовчуванням

10.02.2017 12:02

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом! Якщо ви вважаєте, що наші матеріали були корисними, підтримайте нас будь-якою сумою, щоб ми могли продовжувати надавати вам якісні ресурси.

Новини