Частина тексту файла (без зображень, графіків і формул):
Міністерство освіти і науки України
Національний університет „Львівська політехніка”
Кафедра ЕОМ
Звіт
Системне програмування
ЛАБОРАТОРНА РОБОТА № 7
СТВОРЕННЯ БІБЛІОТЕК ДИНАМІЧНОГО КОМПОНУВАННЯ ТА ЇХ ВИКОРИСТАННЯ В РЕЖИМІ ЯВНОГО ЗВ’ЯЗУВАННЯ
Львів 2012
Мета: Ознайомитись з технологією створення та використання бібліотек динамічного компонування з використанням явного зв’язування.
Теоретичні відомості
Явне зв’язування бібліотеки з програмою (Run-time dynamic linking) полягає в тому, що бібліотека (яка міститься у файлі з розширенням .dll) завантажується в пам’ять в момент виклику АРІ функції LoadLibrary або LoadLibraryEX програмою. При успішному виконанні функція повертає адресу точки входу. При відсутності бібліотеки, яку необхідно завантажити, або при помилках її завантаження функція поверне NULL, а сама програма продовжить виконання. Для виклику бібліотечної функції необхідно оголосити вказівник на функцію, та присвоїти йому адресу бібліотечної функції. Для цього необхідно використати АРІ функцію GetProcAddress, яка повертає адресу вказаної їй у параметрі бібліотечної функції. По завершенню роботи програми необхідно вивантажити бібліотек за допомогою функції FreeLibrary.
Для успішної компіляції необхідно мати лише dll файл бібліотеки. Запуск програми відбудеться навіть за відсутності бібліотечного файлу, оскільки його наявність при використанні явного зв’язування не перевіряється.
Хід виконання:
Варіант 17
Скласти програму для викреслювання із слів тексту всіх букв, що стоять на непарних місцях.
Я написала програму, яка складається з 2-ох етапів. На першому етапі створила бібліотеку. На другому етапі – створила програму, яка викликає функції з створеної бібліотеки.
1-ий етап:
DLLLAB.h
#ifndef _DLLLAB_H_
#define _DLLLAB_H_
#include <iostream>
#include <stdio.h>
#include <windows.h>
#include <string>
using namespace std;
extern "C" __declspec(dllexport) void Del();
#endif
DLLLAB.cpp
#include "DLLLAB.h"
#include <iostream>
#include <string>
#define MAXMODULE 40
char module[MAXMODULE];
extern "C" __declspec(dllexport) void Del()
{
char string[40] = "Petrunyak Marta Ivanivna studentka!";
GetModuleFileName(NULL, (LPTSTR)module, MAXMODULE);
cout << "This function was called from "
<< module
<< endl << endl;
cout<<"POCHATKOVUJ RYADOK: "<<string<<endl;
int i = 0, y = 0;
char temp[40];
while(i<40){
if(i%2 == 0){
temp[y++] = string[++i];
}
else
i++;
}
temp[y] = 0;
cout<<"KINCEVUJ RYADOK: "<<temp;
}
2-ий етап:
main.cpp
#include <windows.h>
#include <iostream>
#include <stdio.h>
#include <conio.h>
using namespace std;
#define MAXMODULE 50
typedef void (WINAPI*cfunc)();
cfunc Del;
void main()
{
HINSTANCE hLib=LoadLibrary("DLLLAB.DLL");
if(hLib==NULL)
{
cout << "Unable to load library!" << endl;
getch();
return;
}
char mod[MAXMODULE]; Del=(cfunc)GetProcAddress((HMODULE)hLib, "Del");
if(Del==NULL)
{
cout << "Unable to load function(s)." << endl;
FreeLibrary((HMODULE)hLib);
return;
}
Del();
FreeLibrary((HMODULE)hLib);
getch();
}
Результат виконання:
/
Висновок: виконавши дану лабораторну роботу, я ознайомилась з технологією створення та використання бібліотек динамічного компонування з використанням явного зв’язування.
Ви не можете залишити коментар. Для цього, будь ласка, увійдіть
або зареєструйтесь.
Ділись своїми роботами та отримуй миттєві бонуси!
Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!