Инициализация и завершение работы библиотеки

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

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

Пример использования переменной DllProc:

LibraryMyLib;

var SaveDllProc: TDLLProc;

procedure LibExit(Reason: Integer);

Begin

if Reason = DLL_PROCESS_DETACH then

Begin

// завершениебиблиотеки

End;

SaveDllProc(Reason); // вызовпредыдущейпроцедуры

End;

Begin

... // инициализация библиотеки

SaveDllProc := DllProc; // сохранение предыдущей процедуры

DllProc := @LibExit; // установка процедуры LibExit

End.

Процедура LibExit получает один целочисленный аргумент, который уточняет причину вызова. Возможные значения аргумента:

·DLL_PROCESS_DETACH — отключение программы;

·DLL_PROCESS_ATTACH — подключение программы;

·DLL_THREAD_ATTACH — создание параллельного потока;

·DLL_THREAD_DETACH — завершение параллельного потока.

Обратите внимание, что установка значения переменной DllProc выполняется в главном программном блоке, причем предыдущее значение сохраняется для вызова "по цепочке".

Рекомендуется прибегать к переменнойDllProc лишь в том случае, если библиотека должна реагировать на создание и уничтожение параллельных потоков. Во всех остальных случаях лучше выполнять инициализацию и завершение с помощью секций initialization и finalization.








Дата добавления: 2015-09-07; просмотров: 1173;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

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

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.004 сек.