Работа с DLL в Delphi [1]



Что такое DLL? DLL - Dynamic Link Library, динамическая библиотека, в которую записываются различные функции и процедуры, которые программа, в последующем, может из библиотеки экспортировать и использовать. Вся прелесть данных библиотек в том, что весь основной код, все модули и функции программы можно записать в .DLL формат, после чего распаковать его куда-либо в систему пользователя и обращаться к нему при надобности вызова этих процедур, в то время, как ваша программа при обычной работе будет использовать минимальное количество ресурсов.

Теперь давайте разберёмся, как создавать данные библиотеки. В Delphi это делается крайне просто:

Выбираем Menu - File - New - Other:



После чего выбираем Dynamic Link Library:



И нажимаем Ok.

Delphi сгенирирует пустой шаблон DLL - библиотеки. Теперь научимся его правильно заполнять и рассмотрим все нюансы.

Давайте пропишем в код первую процедуру, в которой будет лишь функция ShowMessage (функция диалога). Для этого в секцию Uses нужно добавить модуль Dialogs и сразу после {$R *.res} прописать:

Procedure One; stdcall; export;
Begin
ShowMessage('1');
End;


Теперь подробнее об операторах StdCall и Export.

StdCall - это оператор, который реализует соглашение о передаче параметров данной процедуры и возможности вызова самой процедуры. Он отправляет данные в стек (часть памяти), укладывая их справа налево, после чего программа, которая использует данную библиотеку, считывает эти данные из стека и очищает его.

Export уточняет, что процедура или функция будет затем перемещена в секцию Exports. Что за секция? Так мы плавно переходим к последней части структуры нашей DLL - библиотеки - секции Exports, которая объявляется перед основной связкой begin..end, после объявления всех процедур и функций. Объявляется она ключевым словом Export, после чего ставится пробел и прописываются все те процедуры, которые могут быть вызваны затем программой. В нашем случае:

Exports One;


Теперь сохраняем проект и нажимаем комбинацию Ctrl+F9, тем самым компилируем библиотеку. Проверяем папку, куда сохранили проект и видим:



Всё прошло успешно.

Теперь научимся экспортировать данные из библиотеки. Для этого создадим новый проект, сохраним его и в папку, куда сохранили, закинем ту самую DLL - библиотеку (project1), которую создали выше.

И рассмотрим способы вызова нашей процедуры.

Первый:

implementation
 
procedure One; stdcall; external 'Project1.dll';
 
{$R *.dfm}


После ключевого слова implementation прописывается название процедуры, которая будет вызвана, затем оператор stdcall, с которым мы познакомились выше, а затем дирректива external, которая указывает, из какой библиотеки производится вызов.

Теперь добавим компонент Button на форму и на обработчике события onclick пропишем импортированную процедуру:

procedure TForm1.btn1Click(Sender: TObject);
begin
One;
end;


Запуск, проверка:



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

Спасибо за внимание!
Теги:
библиотеки, Delphi, может, использовать, Теперь, функции, программа, библиотека, Library, Dynamic, языке, другом, создавать, например, разберёмся, давайте, использована, весовый, заключается, примеру
Добавлено: 24 Февраля 2015 20:17:40 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...