
- •16. Вопрос: Технологии Windows. Программирование динамически подключаемых библиотек.
- •17. Вопрос: Технологии Windows. Основы технологии com. Теоретические основы технологии.
- •18. Вопрос: Программирование базы данных (бд) в Delphi. Схема взаимодействия компонент при подключении к бд.
- •Cвязь с объектом ado в Delphi
- •19. Вопрос: Современные методологии и стандарты в области ит.
- •20. Вопрос: Производственный ит-менеджмент.
- •21. Вопрос: Стратегическое планирование развития ит-сферы на предприятии.
- •22. Вопрос: Аутсорсинг и инсорсинг. Оценка преимуществ и недостатков.
- •23. Вопрос: ит-сфера как инновационная сфера.
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 тремя способами.
По имени. (procedure MyProc; external 'MyLib.dll'; В этом описании процедура MyProc импортируется из динамически загружаемой библиотеки MyLib.dll по своему собственному имени MyProc.)
По новому имени. (procedure MyProc; external 'MyLib.dll' name 'NewName'; В этом описании процедура MyProc импортируется из динамически загружаемой библиотеки MyLib.dll не по своему собственному имени МуРrос, а по новому имени NewName)
По порядковому номеру. (procedure MyProc; external 'MyLib.dll' index 7; В этом описании процедура МуРrос импортируется из динамически загружаемой библиотеки MyLib.dll по индексу 7)
Статический вызов DLL:
При запуске приложения загружается автоматически. Она остается в памяти на протяжении выполнения программы. Очень просто использовать. Если DLL не будет найден, программа будет продолжать работать.
Динамический вызов DLL:
DLL загружается в память по мере необходимости. Память используется более экономно, поэтому приложение работает быстрее. Программист сам должен следить, чтобы все работало правильно. Для этого нужно:
Объявить тип описываемой функции или процедуры.
Загрузить библиотеку в память.
Получить адрес функции или процедуры в памяти.
Вызвать функцию или процедуру.
Выгрузить библиотеку из памяти.