Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОТВЕТЫ ОС ЭКЗАМЕН.docx.doc
Скачиваний:
2
Добавлен:
16.09.2019
Размер:
185.86 Кб
Скачать

5. Библиотека. Динамическая библиотека. Динамическая загрузка.

Существует два основных способа подключить DLL к программе - динамический и статический.

При динамическом подключении (explicit linking) приложение вызывает функцию LoadLibrary, чтобы загрузить DLL, затем использует функцию GetProcAddress, чтобы получить указатели на требуемые функции (или переменные), а по окончании работы с ними вызывает FreeLibrary, чтобы выгрузить библиотеку и освободить занимаемые ею ресурсы.

Например загрузка DLL выглядит так:

HMODULE hLib;

hLib = LoadLibrary("MyDll.dll");

Например вызов функций DLL выглядит так:

void (*pFunction)(int, int);

(FARPROC &)pFunction = GetProcAddress(hLib, "Function");

pFunction(0, 0);

Доступ к переменным в DLL выглядит так:

int *pVar;

(FARPROC &)pVar = GetProcAddress(hLib, "Var");

*pVar = 123;

После того, как работа с библиотекой закончена, ее можно выгрузить, чтобы она не занимала системные ресурсы. Для этого используется функция FreeLibrary, которой следует передать дескриптор освобождаемой библиотеки.

Например выгрузка библиотеки выглядит вот так: FreeLibrary(hLib);

Динамический метод подключения лишен недостатков как при статическом подключении, но делает программирование более неудобным, поскольку требуется следить за своевременными вызовами LoadLibrary и соответствующими им вызовами FreeLibrary, а также получать адрес каждой функции через вызов GetProcAddress.

6. Библиотеки. Сравнение.

Статическая библиотека

Динамическая библиотека

Достоинства:

- образует вместе с остальными дополнениями единое целое, т.е. для использования приложения достаточно иметь один файл типа exe.

- Обращаться к функциям в библиотеки очень просто, пользование функции из статической библиотеки ни чем не отличается от использования функций, определенных в приложении.

- Более защищены чем динамические библиотеки.

Недостатки:

- библиотека зависит от среды разработки. Библиотека, которая была создана в С++Builder, нельзя использовать в Visual Studio и наоборот.

- хранятся в памяти постоянно причем в стольких экземплярах, сколько запущено программ, использующих эту библиотеку.

- при необходимости обновления библиотеки, необходимо обновить все приложения, использующие эту библиотеку.

Достоинства:

- библиотеки не зависят от среды, в котором они созданы. Так библиотека, созданная в среде С + + Builder, можно использовать в среде Visual Studio и наоборот;

- при изменении кода библиотеки не требуется повторная компоновка приложений, использующих эту библиотеку, вот почему операционная система использует этот тип библиотек для модулей, которые могут изменяться в зависимости от версии и в случае ошибок;

- если несколько приложений используют одну и ту же библиотеку, копия этой библиотеки хранится в памяти только один раз.

Недостатки:

- Кроме программы, которая выполняется необходимо иметь дополнительный модуль - саму библиотеку.

- Функции DLL использовать сложнее, чем функции статической библиотеки.

- Остальные преимуществ и недостатков DLL зависят от режимов использования библиотеки этого типа.

Недостатки статического режима использования .dll:

- .lib файл является платформенно -зависимым.

- .dll не всегда содержит .lib файл, например ресурсная DLL.

- dll находится в памяти все время выполнения программы.

Динамический метод подключения делает программирование более неудобным, поскольку требуется следить за своевременными вызовами LoadLibrary и соответствующими им вызовами FreeLibrary, а также получать адрес каждой функции через вызов GetProcAddress.