Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Використання DLL




Створення DLL

Розглянемо формування DLL бібліотеки для Visual Studio 2008, для інших середовищ бібліотеки створюються подібно.

Для створення DLL в середовищі використовується проект типу DLL (File®New®Projects®Win32). Після завдання імені проекту обирається тип DLL і, поки що, обираємо пусту DLL (An empty DLL project). Додамо до проекту необхідні файли з визначення функцій. Додамо файл з заголовками експортованих функцій. Ці функції повинні в заголовку мати __declspec (dllexport).

Трансляція та компоновка DLL виконується як і для проектів інших типів.

В результаті виконання буде створено один або 2 файли: файл *.dll і, *.lib, якщо є хоч одна експортована функція. Імена файлі по замовченню співпадають з іменем проекту. Ці імена можна замінити. Файл *.lib вміщує довідник функцій, а саме ім’я відповідної DLL та таблицю функцій. для кожної функції задається її ім’я, номер, та адреса відносно початку DLL. Раніше номер використовувався для виклику відповідної функції, сьогодні для виклику функцій використовується тільки її ім’я.

Згадайте режими використання DLL:

- завантаження DLL під час завантаження додатка, який використовує DLL (якщо попередні додатки не завантажили цю DLL). Вивантаження після завершення цього додатку (якщо другі додатки не використовують цю DLL);

- завантаження та вивантаження DLL виконується за допомогою функцій WINAPI тоді, коли необхідно використовувати функції DLL (коли необхідність в функціях відпадає).

Для першого режиму використання необхідно підключити до проекту, який використовує функції з DLL, файл з розширенням lib, який сформовано при виконанні 2.2.4. В заголовках функцій з DLL необхідно вказати __declspec (dllimport). Далі функції викликаються як для статичної бібліотеки.

Переваги першого режиму.

1. Якщо немає необхідної DLL, програма не буде завантажена.

2. Використання по складності однаково з використанням статичних бібліотек.

Недоліки першого режиму:

1. Файл з розширенням lib є платформенно залежним, тобто Visual Studio, C++ Builder використовують різні файли.

2. Бібліотека завантажується при завантаженні програми та залишається завантаженою до тих пір, поки програма не завершиться. А можливо, що бібліотека зовсім не буде потрібна (виконується частина програми, яка не викликає функцій бібліотеки), або використовується тільки на початку програми.

3. Не може використовуватися для DLL, які вміщують тільки ресурси і не вміщують експортованих функцій.

Для другого режиму використання необхідно виконати такі кроки.

1. Підключити файл заголовків Windows.h

2. Перед використанням першої функції з DLL завантажити цю DLL. Для цього використовується функція LoadLibrary.

HMODULE WINAPI LoadLibrary(LPCTSTR lpFileName);

3. Після використання цієї функції необхідно перевірити успішність завантаження (результат не дорівнює 0).

4. Для кожної функції із бібліотеки, яку потрібно використовувати, треба визначити адресу цієї функції. Для цього використовується функція

FARPROC WINAPI GetProcAddress(HMODULE hModule, LPCSTR lpProcName);

де hModule – дескриптор бібліотеки;

lpProcName – імя функції (внутрішнє).

5. Внутрішнє ім’я функції можна знайти в самій DLL. Для того, щоб крім внутрішнього імені можна було б використовувати звичайне ім’я, ці імена необхідно задати в файлі з розширенням DLL. Після використання функції визначення адреси, необхідно перевірити успішність цієї функції (адреса не дорівнює 0).

6. Далі функції викликаються як звичайні функції.

7. Після виклику останньої функції бібліотеку можна вигрузити. Для цього використовується функція FreeLibrary:

BOOL WINAPI FreeLibrary(HMODULE hModule);

8. Якщо функції DLL використовуються до кінця програми, функцію FreeLibrary можна не використовувати, операційна система визволить усі ресурси при завершенні програми. DLL відноситься до ресурсів.




Поделиться с друзьями:


Дата добавления: 2014-12-07; Просмотров: 433; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.007 сек.