Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
shpory_16-23.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
253.7 Кб
Скачать

16. Вопрос: Технологии Windows. Программирование динамически подключаемых библиотек.

Динамически подключаемые библиотеки - Dynamically Linked Library (DLL) - предоставляют прикладным программам дополнительные возможности на этапе выполнения. Object Pascal позволяет программистам писать собственные DLL, которые впоследствии можно использовать наряду со стандартными.

  • DLL могут совместно использоваться несколькими прикладными программами.

  • DLL поддерживают "многоязыковые" проекты: в программах, написанных на языке Object Pascal, допускается использование DLL, созданных на других языках.

Структура динамически подключаемой библиотеки практически такая же, как и структура проекта. Отличие состоит только в том, что в заголовке вместо зарезервированного слова program записывается зарезервированного слово library. Это слово указывает компилятору, что требуется создать выполняемый файл динамически подключаемой библиотеки, который должен иметь расширение .DLL, а не .ЕХЕ.

пример использования DLL:

library proba;

function Vect_Max () : Integer; export;

begin

end;

function Vect_Min () : Integer; export;

begin

end;

exports

Vect_Max index 1,

Vect_Min index 2;

begin

end.

… - программный код

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

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

   Программы и модули, написанные на языке Object Pascal, могут импортировать процедуры и функции из DLL тремя способами.

  1. По имени. (procedure MyProc; external 'MyLib.dll'; В этом описании процедура MyProc импортируется из динамически загружаемой библиотеки MyLib.dll по своему собственному имени MyProc.)

  2. По новому имени. (procedure MyProc; external 'MyLib.dll' name 'NewName'; В этом описании процедура MyProc импортируется из динамически загружаемой библиотеки MyLib.dll не по своему собственному имени МуРrос, а по новому имени NewName)

  3. По порядковому номеру. (procedure MyProc; external 'MyLib.dll' index 7;     В этом описании процедура МуРrос импортируется из динамически загружаемой библиотеки MyLib.dll по индексу 7)

Статический вызов DLL:

При запуске приложения загружается автоматически. Она остается в памяти на протяжении выполнения программы. Очень просто использовать. Если DLL не будет найден, программа будет продолжать работать.

Динамический вызов DLL:

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

  1. Объявить тип описываемой функции или процедуры.

  2. Загрузить библиотеку в память.

  3. Получить адрес функции или процедуры в памяти.

  4. Вызвать функцию или процедуру.

  5. Выгрузить библиотеку из памяти.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]