DevioLabавтоматичне керування капіталом
ПРАЦЮЄ 24/7
КРИПТОВАЛЮТИ · АКЦІЇ · 10 БІРЖ

Портфель, який керується автоматично

DevioLab підбирає стратегії, відстежує ринки та автоматизує купівлю і продаж активів. Кількість доступних криптовалют, акцій і торгових можливостей зростає щодня.

10підключених біржCrypto + Stocksв одному портфелі24/7автоматичний контроль

Створення бібліотек динамічного компонування та їх використання в режимі неявного зв’язування

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

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Інститут комп’ютерних наук та інформаційних технологій
Факультет:
КН
Кафедра:
Кафедра електронних обчислювальних машин

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

Рік:
2013
Тип роботи:
Звіт про виконання лабораторної роботи
Предмет:
Системне програмування
Група:
КН-31
Коротко про документ

Про що ця робота

Звіт про виконання лабораторної роботи присвячено вивченню технології створення та застосування бібліотек динамічного компонування (DLL) в режимі неявного зв’язування. У роботі наведено практичний приклад реалізації та тестування DLL на мові C++.

У роботі розглядаються

  • Системне програмування
  • Динамічно завантажувані бібліотеки (DLL)
  • Неявне зв'язування
  • Мова програмування C++
  • Експортні функції
  • Точка входу DllMain
  • Обробка рядків

Зміст і розділи

  1. Мета роботи
  2. Теоретичні відомості
  3. Код програми
  4. Заголовний файл (dlltest.h)
  5. Код бібліотеки (dlltest.cpp)
  6. Основний модуль (main.cpp)
  7. Результат виконання програми / висновок
Для кого:Студенти технічних спеціальностей вищих навчальних закладів, які вивчають дисципліну «Системне програмування».
Викладачі:Олексів М. В.

Ключові поняття

DLLнеявне зв'язуваннядинамічне компонуванняекспортні функціїDllMainWin32 APIзв'язування бібліотекзаголовний файлC++

Частина тексту файла (без зображень, графіків і формул):

МІНІСТЕРСТВО ОСВІТИ І НАУКИ, УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА” Кафедра ЕОМ Звіт про виконання лабораторної роботи № 6 з курсу „ Системне програмування” СТВОРЕННЯ БІБЛІОТЕК ДИНАМІЧНОГО КОМПОНУВАННЯ ТА ЇХ ВИКОРИСТАННЯ В РЕЖИМІ НЕЯВНОГО ЗВ’ЯЗУВАННЯ Мета роботи: ознайомитись з технологією створення та використання бібліотек динамічного компонування з використанням неявного зв’язування. Теоретичні відомості Команди порівняння чисел DLL (англ. Dynamic-link library — динамічно завантажувана бібліотека) — реалізовані компанією Microsoft загальні бібліотеки в ОС Windows. Як правило бібліотеки мають розширення файлу *.dll, *.ocx (для бібліотек, що містять елементи керування ActiveX) або *.drv (драйвери старих версій ОС). Структура DLL така сама, як і в PE-файлів (Portable Executable) для 32-, 64-розрядних Windows, та New-Executable (NE) для 16-бітових Windows. DLL може містити 2 типи функцій: експортні та внутрішні. Експортні функції визначаються за допомогою ключового слова __declspec(dllexport) і можуть бути викликані з програм, що завантажили динамічну бібліотеку, яка містить ці функції. Внутрішні функції – це функції, які використовуються в середині DLL і не можуть бути викликані ззовні. DLL є модулем (module). Тобто, вона складається з: сегментів коду, сегментів ресурсів та одного сегменту даних. Крім цього DLL може містити точку входу. Точка входу – це функція DllMain, яка викликається при завантаженні або вивантажені бібліотеки потоком або процесом. Ця функція має наступний прототип: BOOL APIENTRY DllMain( HANDLE hModule, // Хендл DLL модуля DWORD ul_reason_for_call, // Причина виклику LPVOID lpReserved ); // Зарезервовано Якщо DllMain повертає FALSE, то бібліотека вважається такою, що не завантажилася. При неявному зв’язуванні це призведе до відмови запуску програми, а при явному – помилки завантаження лише цієї бібліотеки. Можливі 2 способи використання динамічних бібліотек. Вони називаються явним та неявним зв’язуванням. Явне та неявне зв’язування бібліотеки з програмою мають суттєві відмінності в процесі написання та компіляції програми. Неявне зв’язування бібліотеки з програмою (Load-time dynamic linking) полягає в тому, що бібліотека (яка міститься у файлі з розширенням .dll) завантажується в пам’ять в момент завантаження програми. При відсутності бодай однієї з бібліотек при запуску програми відбудеться збій та припинення виконання програми. Щоб реалізувати неявне зв’язування необхідно до проекту програми включити прототипи функцій, що містяться в бібліотеці та бібліотеку імпорту (має розширення .lib). На даному етапі наявність файлу з розширенням .dll не є необхідною. При компіляції лінкер створює виконавчий файл, який містить код, що забезпечує систему інформацією, яка необхідна для автоматичного завантаження бібліотеки з .dll файлу та інформацією, яка необхідна для зв’язування імен функцій у програмі з їх адресами у бібліотеці. Неявне зв’язування дозволяє здійснювати виклик функцій з бібліотеки написанням коду програми в стилі притаманному мовам С\С++. 3 Відредагувати заданий текст, перевертаючи слова з парними номерами. Наприклад, HOW DO YOU DO -> OD OD   Код програми Заголовний файл (dlltest.h) #ifndef _DLLTEST_H_ #define _DLLTEST_H_ #include <iostream> #include <stdio.h> #include <windows.h> using namespace std; extern "C" __declspec(dllexport) void f(char *k); // дозволяє нам не створювати файл mydll.def, оскільки //вмістиме цього файлу включається в бібліотеку. __declspec(dllexport) створює файли в форматі «С++» #endif Код бібліотеки (dlltest.cpp) #include "dlltest.h" int main(){ char p[]="What do you do "; f(p); return 0; } Main. Cpp #include <iostream> #include <stdio.h> #include "dlltest.h" using namespace std; void f(char* k){ char ar[20][20]={0}; char* poch=k; int index=0; for(int i=0;*k!=0;k++,i++){ if(*k==' '){ for(int p=0;poch!=k;poch++,p++) ar[index][p]=*poch; index++; poch++; } } char tmp[20]={0}; int count=0; for(int h=0;h<=index;h++) if(h%2==1){ for(int i=0;ar[h][i]!=0;i++) count++; for(int i=0;ar[h][i]!=0;i++) tmp[i]=ar[h][i]; for(int z=0;count!=0;z++){ ar[h][z]=tmp[count-1]; count--; } } for(int i=0;i<4;i++) cout<<ar[i]<<" "; } Результат виконання програми / Висновок: ознайомитись з технологією створення та використання бібліотек динамічного компонування з використанням неявного зв’язування.
Допоможи студентському архіву

Ми допомогли тобі — допоможи наступному студенту

Файл ще не обрано

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

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

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

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!