Главная » 2013 » Февраль » 11 » Dynamic-Link Library: Теория + Практика
00:16
Dynamic-Link Library: Теория + Практика
    • 2.4. Отложенная загрузка.


    Для чего же нужна отложенная загрузка?
    Представьте себе ситуацию: вы написали приложение, использующее стандартные системные библиотеки вашей новой операционной системы, скажем, для проверки орфографии.
    Даёте это приложение пользователю, который использует ОС более старой версии, чем у вас и в этой ОС нет функций для проверки орфографии. А пользователю это не сильно и надо. Приложение будет работать, пока не обратится к необходимой функции. То есть, фактически, DLL не нужна до обращения к определённой функции. Исключение отсутствия можно обработать и выдать пользователю предупреждение с просьбой обновить библиотеки своей ОС (и т.п.).

    Использование отложенной загрузки DLL в C++ Builder мало отличается от неявной загрузки. 
    В проект добавляется заголовочный (*.h) файл с описаниями и библиотечный файл (*.lib).
    Далее, переходим в Project -> Options -> C++ Linker -> Advanced -> Delay Load DLLs и вписываем название нашей библиотеки (TestDLL.dll).

    Когда библиотека теряет свою необходимость её нужно явно выгрузить с помощью __FUnloadDelayLoadedDLL. В качестве параметра передаём имя DLL (с расширением + параметр регистрозависим).
    Если вы используете многопоточные приложения - убедитесь, что все потоки завершили работу с DLL.

    Примечание: Нельзя использовать отложенную загрузку для библиотек, имеющих секцию импорта (т.е. использующих другие библиотеки), а также Kernel32.dll и RTLDLL.dll (т.к. функции поддержки отложенной загрузки как раз и находятся в последней).



    3. Заключение.

    Данная статья даёт вам представление о возможных вариантах использования DLL в ваших проектах.
    При внимательном ознакомлении с методами загрузки можно выбрать наиболее оптимальный вариант.

    Подведя итоги можно выявить плюсы и минусы описанных методов:

    Явная загрузка:
    + контроль и управление процессом жизни DLL.
    - управлением DLL занимается программист посредством WinAPI.

    Неявная загрузка:
    + все заботы берет на себя компилятор и сборщик.
    - ресурсы заняты всё время жизни приложения.

    Отложенная загрузка:
    + все заботы берет на себя компилятор и сборщик.
    + возможность использования приложения с не полностью совместимыми DLL.
    - необходимость усиленного контроля за многопоточными приложениями.
Просмотров: 415 | Добавил: Andre99 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]