Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Подключение DLL-библиотекDLL-библиотека может подключаться или статически, или динамически. При подключении DLL-библиотеки она загружается в память приложения. При статическом подключении DLL-библиотека загружается один раз при запуске приложения. На всем протяжении выполнения приложения имя функции, импортируемой из DLL-библиотеки, которая была подключена статически, указывает на одну и ту же функцию (точку входа в DLL) в одной и той же DLL. Все функции из DLL-библиотеки, которые будут использоваться в приложении первоначально, должны быть объявлены как внешние. При этом следует указать, если требуется, модификатор вызова. Если функция вызывается по индексу, то для нее следует задать имя, используемое в приложении, и индекс функции в DLL-библиотеке. Объявления внешних функций выполняется в секции implementation до использования этих функций. Объявление внешней функции с ключевым словом external определяет, что будет использовано статическое связывание. Динамическое подключение DLL-библиотеки. В отличие от статического подключения DLL-библиотеки, выполняемого в момент загрузки приложения, динамическое подключение DLL-библиотеки может быть выполнено в любой точке выполнения программы. После вызова функции из DLL-библиотеки ее можно отключить. При одновременном использовании нескольких DLL-библиотек это дает ощутимую экономию памяти. Для динамического подключения DLL-библиотеки используются функции Windows API. Windows API - это набор стандартных функций, используемый для реализации взаимодействия с операционной системой. При вызове функции из динамически подключаемой DLL- библиотеки вместо определения имени функции как external в случае статического связывания следует определить новый тип, соответствующий типу вызываемой функции, и создать переменную данного типа. Определение типа функции или процедуры описывается как:
новый_тип=function(список_параметров|:тип_функиии;модификатор_досгупа;
или:
новый_тип=procedure(список_параметров)/модификатор доступа;
Для того чтобы выполнить вызов функции из динамически подключаемой DLL-библиотеки, выполните следующие действия:
1. Создать новый тип, соответствующий типу вызываемой функции (имя нового типа можно ввести после секции type). Например: TMyFl=function(i,j:Integer}:Integer; stdcall; 2. В секции var interface-секции модуля создать переменную созданного типа функции. Например: MyFl: TMyFl; 3. Перед загрузкой DLL-библиотеки объявить переменную типа Integer, которая будет содержать дескриптор подключаемой библиотеки. 4. Вызвать метод LoadLibrary, выполняющий подключение DLL- библиотеки. Например; h:=LoadLibrary('Projectl. dll'); 5. Проверить, успешно ли выполнено подключение библиотеки. Если имя DLL-библиотека указано неверно или библиотека не найдена, то функция LoadLibrary вернет значение 0. 6. В случае успешного подключения DLL-библиотеки далее следует получить адрес функции. Для этого используется функция Windows API GetProcAddress, в качестве параметров которой указывается дескриптор DLL-библиотеки и имя подключаемой функции. Например:....:=GetProcAddress(h,'F1'); 7. Если адрес функции получен, то значение адреса (в нашем примере @MyFl) не должно быть равно nil. 8. На этом этапе можно выполнять вызов функции из динамически подключенной DLL-библиотеки. 9. Для освобождения и соответственно выгрузки DLL-библиотеки вызовите метод FreeLibrary, выполняющий отключениеDLL-библиотеки. Динамические библиотеки могут содержать не только исполняемый код, проводящий некоторые вычисления, но и ресурсы. Чаще всего бывает необходимо распространять вместе с DLL формы, обеспечивающие работу процедур и функций. Приемы работы с формами в проектах динамических библиотек ничем не отличаются от тех же приемов в проектах обычных приложений. Единственная особенность заключается в том, что любая форма в DLL должна рассматриваться как создаваемая вручную, а не автоматически. При этом в процедуру, создающую форму, должен быть передан указатель на владельца будущей формы. Например, процедура showDemoForm из рассматриваемой нами библиотеки DataCheck, выглядит так:
procedure ShowDemoForm(AOwner: TComponent); begin DemoForm:= TDemoForm.Create(AOwner); DemoForm.ShowModal; DemoForm.Free; end; Тема: Создание многопоточных приложений 1. Понятие потоков и процессов 2. Средства синхронизации потоков 3. Создание модулей-потоков в Delphi 4. Свойства и методы потоков
|