Частина тексту файла (без зображень, графіків і формул):
МІНІСТЕРСТВО ОСВІТИ І НАУКИ, МОЛОДІ ТА СПОРТУ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”
Кафедра ЕОМ
/
Звіт
з лабораторної роботи № 7
з дисципліни:
«Системне програмування»
на тему:
" СТВОРЕННЯ БІБЛІОТЕК ДИНАМІЧНОГО КОМПОНУВАННЯ ТА ЇХ ВИКОРИСТАННЯ В РЕЖИМІ ЯВНОГО ЗВ’ЯЗУВАННЯ"
Мета: Ознайомитись з технологією створення та використання бібліотек динамічного компонування з використанням явного зв’язування.
Теоретичні відомості
Явне зв’язування бібліотеки з програмою (Run-time dynamic linking) полягає в тому, що бібліотека (яка міститься у файлі з розширенням .dll) завантажується в пам’ять в момент виклику АРІ функції LoadLibrary або LoadLibraryEX програмою. При успішному виконанні функція повертає адресу точки входу. При відсутності бібліотеки, яку необхідно завантажити, або при помилках її завантаження функція поверне NULL, а сама програма продовжить виконання. Для виклику бібліотечної функції необхідно оголосити вказівник на функцію, та присвоїти йому адресу бібліотечної функції. Для цього необхідно використати АРІ функцію GetProcAddress, яка повертає адресу вказаної їй у параметрі бібліотечної функції. По завершенню роботи програми необхідно вивантажити бібліотек за допомогою функції FreeLibrary.
Для успішної компіляції необхідно мати лише dll файл бібліотеки. Запуск програми відбудеться навіть за відсутності бібліотечного файлу, оскільки його наявність при використанні явного зв’язування не перевіряється.
Хід виконання:
Варіант 4
. Дано текст. Знайти кількість слів, у яких перший і останній символи співпадають між собою.
Я написав програму, яка складається з 2-ох етапів. На першому етапі створив бібліотеку. На другому етапі – створив програму, яка викликає функції з створеної бібліотеки.
1-ий етап:
DLLLAB.h
#ifndef _MYFUNC_H_
#define _MYFUNC_H_
//підключення бібліотеки ввожу/виводу
#include <iostream>
using namespace std;
//оголошення прототипів процедур
extern "C" __declspec(dllexport) int func(const char*);
#endif
DLLLAB.cpp
#include "source.h"
extern "C" __declspec(dllexport)
int func(const char* strIn)
{
int length = strlen(strIn);
int counter=0;
char* str = new char[strlen(strIn)];
strcpy(str,strIn);
char *p;
p = strtok(str, " ");
if(p!=NULL && strlen(p)>0 && p[0]==p[strlen(p)-1])
counter++;
do {
p = strtok('\0', "\t\n,. (){}[]/!?");
if(p!=NULL && strlen(p)>0 && p[0]==p[strlen(p)-1])
counter++;
} while(p);
return counter;
}
2-ий етап:
main.cpp
#include <Windows.h>
#include <conio.h>
#include <iostream>
using namespace std;
//оголошення власного типу вказівника на процедури
typedef int (*funcPtr)(char*);
void main ()
{
funcPtr func;
HMODULE hLib;
hLib = LoadLibraryA((LPCSTR)"ExplisitlyBindingLib.dll");
if(hLib==NULL)
{
cout << "Unable to load library!" << endl;
getch();
return;
}
////отримання адрес процедур в підвантаженому dll-модулі
func = (funcPtr)GetProcAddress(hLib, "func");
////На випадок відсутності обох(однієї) процедур(и)
////у підвантажуваній бібліотеці
if(func==NULL)
{
cout << "Unable to load function(s)." << endl;
FreeLibrary((HMODULE)hLib);
return;
}
//char* str ="aahcbaca bvcsaa gfjdfjdg";
char* str = new char[255];
cin.getline(str,255);
cout<<str<<" "<<func(str);
FreeLibrary(hLib);
getch();
}
/
Висновок: виконавши дану лабораторну роботу, я ознайомився з технологією створення та використання бібліотек динамічного компонування з використанням явного зв’язування.
Ви не можете залишити коментар. Для цього, будь ласка, увійдіть
або зареєструйтесь.
Ділись своїми роботами та отримуй миттєві бонуси!
Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!