Delphi программа как dll

Динамическая библиотека, или DLL, является совокупностью подпрограмм (маленьких программ), которые могут вызываться приложениями или другими DLL. Подобно модулям, DLL содержит общий код или ресурсы, которые могут использовать несколько приложений одновременно из одного экземпляра DLL. В сущности Windows — это просто совокупность DLL.

Естественно, используя Delphi, мы можем тоже написать и использовать наши собственные DLL и можем вызывать функции в DLL, разработанном другими разработчиками и на других системах (типа Visual Basic или C/C++).

Создание динамической библиотеки

Следующие несколько строк демонстрируют, как создать простой DLL, используя Delphi.

Начинающим Дельфистам нужно из меню выбрать File | New. DLL. Это создаст шаблон нового DLL в окне редактора. Выделите заданный по умолчанию текст и замените его следующим кодом:

library TestLibrary; uses SysUtils, Classes, Dialogs; procedure DllMessage; export; begin ShowMessage(‘Hello world from a Delphi DLL’) ; end; exports DllMessage; begin end.

Если Вы посмотрите на файл проекта любого приложения Delphi, Вы увидите, что он начинается с зарезервированного слова Program. DLL в отличие от этого, начинается с зарезервированного слова Library. Затем это сопровождается пунктом uses для любых необходимых модулей. В этом простом примере за этим следует процедура по имени DllMessage, которая не делает ничего, кроме показа простого сообщения.

DLL programming — Delphi #27

В конце этого текста, стоит инструкция exports. Здесь включен список подпрограмм, которые будут экспортированы из DLL и могут вызываться другими приложениями. Это означает, что, например, в DLL находится 5 процедур и только 2 из них (перечисленных в разделе exports) могут вызываться из внешних программ (3 из них подпрограммы в DLL).

Чтобы использовать этот простой DLL, мы должны скомпилировать его, нажав Ctrl+F9. Это создасть DLL по имени SimpleMessageDll.dll в папке проекта.

А теперь давайте посмотрим, как вызвать процедуру DllMessage из (статически загруженной) DLL.

Чтобы импортировать процедуру, содержащуюся в DLL, мы используем ключевое слово external в объявлении процедуры. Например, объявление процедуры DllMessage, показанной ранее, выглядела бы так:

procedure DllMessage; external ‘SimpleMessageDLL.dll’

А вызов процедуры выглядит так:

DllMessage;

Полный код для формы Form1 с TButton по имени Button1 (для вызова функции DllMessage) выглядит так:

unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject) ; private < Private declarations >public < Public declarations >end; var Form1: TForm1; procedure DllMessage; external ‘SimpleMessageDLL.dll’ implementation procedure TForm1.Button1Click(Sender: TObject) ; begin DllMessage; end; end.

Это все! Все просто, как и все в Delphi!

Источник: codeplace.ru

Создание и работа с DLL библиотеками Delphi | уроки Delphi

Создание dll-библиотеки на Delphi

В среде программирования Delphi предусмотрены встроенные средства для быстрого создания DLL-библиотек.

Читайте также:
Какие из перечисленных программ предназначены для цифрового видеомонтажа на компьютере

Давайте для определенности создадим библиотеку, содержащую функцию

GetArea(a, b, c: REAL):REAL.

Данной функции на вход подаются длины сторон треугольника. Функция возвращает площадь заданного треугольника:

FUNCTION GetArea(a, b, c:REAL):REAL;

Запускаем Delphi, а дальше действуем нетрадиционно. Выбираем пункты меню File  New  Other, в открывшемся окошке на закладке New щелкаем по пиктограмме DLL Wizard . (алгоритм зависит от версии)

При этом создается файл заготовки DLL-библиотеки. Он очень похож на обычный модуль (unit) Delphi, только начинается с оператора Library. Сохраните проект под именем, которое в будущем получит DLL-библиотека, скажем, GetA. Название GetArea использовать нельзя – оно уже занято именем функции.

Теперь после оператора USES пишем текст нашей функции, но с некоторыми изменениями в заголовке:

FUNCTION GetArea(a, b, c:REAL):REAL; export;

Ключевое слово EXPORT указывает на то, что данная функция является экспортируемой и будет видна из внешних программ.

После текста функции припишем

GetArea;

В операторе EXPORTS перечисляются все процедуры и функции, экспортируемые из библиотеки. Это своего рода каталог нашей библиотеки.

Запустить на выполнение библиотеку невозможно, ее можно только откомпилировать. Для этого выполним пункт меню Project → Build. Если все было сделано правильно, на диске в текущей директории будет создан файл с именем geta.dll. Это и есть наша библиотека.

Важное замечание: существует определенная тонкость при передаче процедурам и функциям, находящимся в библиотеке, параметров типа STRING.

Для того, чтобы можно было передавать параметры типа STRING, придется в операторы USES и библиотеки, и вызывающей ее программы прописать подключение модуля ShareMem, да еще и обязательно так, чтобы этот модуль шел первым в списке. Мало того, вместе с библиотекой придется обязательно прилагать файл borlndmm.dll (он входит в поставку Delphi). Избежать этой ситуации просто: следует для параметров текстового типа использовать типы данных ShortString (это обычная строка, но длиной до 255 символов) и PChar (указатель на текстовую строку).

Вызов dll

Существуют два способа вызова процедур и функций из DLL. В первом случае мы заранее, на этапе разработки программы, знаем, какую DLL будем к ней подключать (чаще всего мы сами и создаем эту DLL). Во втором случае мы подключаемся к произвольной библиотеке, в том числе и «чужой».

Статическое связывание

Для реализации первого способа, называемого статическим связыванием, создайте новое обычное приложение, поместите на форму три поля ввода LabeledEdit1…LabeledEdit3, кнопку и компонент Tlabel. После оператора IMPLEMENTATION добавьте строчку, обеспечивающую импорт функции GetArea из библиотеки geta.dll:

Function GetArea(a,b,c:real):REAL; FAR; EXTERNAL ‘geta’;

Слово EXTERNAL указывает на то, что тело данной функции находится в библиотеке с указанным именем, а слово FAR задает применение «длинных» четырехбайтных адресов, что необходимо, так как вызывающая программа находится на одной странице памяти, а DLL-библиотека – на другой. Разумеется, файл geta.dll надо поместить в ту же директорию, где находятся все файлы текущего приложения.

Читайте также:
Что такое программа abs

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

procedure TForm1.Button1Click(Sender: TObject);

Источник: studfile.net

Delphi — Работа с DLL библиотеками

DLL — Dynamic Link Library иначе динамически подключаемая библиотека, которая позволяет многократно применять одни и те же функции в разных программах. На самом деле довольно удобное средство, тем более что однажды написанная библиотека может использоваться во многих программах. В сегодняшнем уроке мы научимся работать с dll и конечно же создавать их!
Ну что ж начнём!

Для начала создадим нашу первую Dynamic Link Library! Отправляемся в Delphi и сразу же лезем в меню File -> New ->Other.
Перед нами появляется вот такое окошко:

Delphi dll библиотека

Выбираем в списке Dynamic-Link Library (в версиях младше 2009 Delphi пункт называется DLL Wizard).

dll delphi библиотека

В результате у нас появляется лишь окно с кодом, заметьте никакой формы у нас здесь нет !
Теперь начинается самое интересное. Напишем наши первые процедуры в библиотеке.

library Project2;
//Вы, наверное уже заметили, что вместо program
//при создании dll используется слово library.
//Означающее библиотека.
uses
SysUtils, dialogs,
Classes; // Внимание ! Не забудьте указать эти модули,
// иначе код работать не будет

Procedure FirstCall; stdcall; export;
//Stdcall – При этом операторе параметры помещаются в стек
//справа налево, и выравниваются на стандартное значение
//Экспорт в принципе можно опустить, используется для уточнения
//экспорта процедуры или функции.
Begin
ShowMessage(‘ Моя первая процедура в dll ‘);
//Вызываем сообщение на экран
End;

Procedure DoubleCall; stdcall; export;
Begin
ShowMessage(‘ Моя вторая процедура ‘);
//Вызываем сообщение на экран
End;

Exports FirstCall, DoubleCall;
//В Exports содержится список экспортируемых элементов.
//Которые в дальнейшем будут импортироваться какой-нибудь программой.
begin
End.

На этом мы пока остановимся т.к. для простого примера этого будет вполне достаточно. Сейчас сохраняем наш проект, лично я сохранил его под именем Project2.dll и нажимаем комбинацию клавиш CTRL+F9 для компиляции библиотеки. В папке, куда вы сохранили dpr файл обязан появится файл с расширением dll, эта и есть наша только что созданная библиотека. У меня она называется Project2.dll

Займёмся теперь вызовом процедур из данной библиотеки. Создаём по стандартной схеме новое приложение. Перед нами ничего необычного просто форма. Сохраняем новое приложение в какую-нибудь папку. И в эту же папку копируем только что созданную dll библиотеку. Т.е. в данном примере Project2.dll

Теперь вам предстоит выбирать, каким способом вызывать функции из библиотеки. Всего существует два метода вызова.

Способ № 1
Пожалуй, это самый простой метод вызова процедур находящихся в библиотеке.
Идеально подходит для работы только с одной библиотекой.

Читайте также:
Delphi проверить запущена ли программа

Ну что поехали.
После ключевого слова implementation прописываем следующий код:

Procedure FirstCall; stdcall; external ‘Project2.dll’ ;
// Вместо Project2.dll может быть любое имя библиотеки
Procedure DoubleCall; stdcall; external ‘Project2.dll’ ;

Здесь, как вы уже наверное догадались, мы сообщаем программе названия наших процедур и говорим, что они находятся в dll библиотеке, в моем случае с именем Project2.dll

Теперь для того, что бы вызвать данные процедуры нам необходимо лишь вставить их названия в любое место кода, что мы сейчас и сделаем. Кидаем на форму 2 компонента Button с закладки Standart и создаем на каждой обработчик событий OnClick

OnClick первой кнопки:

Procedure TForm1.Button1Click(Sender: TObject);
Begin
FirstCall; // Имя процедуры, которая находится в dll
End;

OnClick второй кнопки:

Procedure TForm1.Button2Click(Sender: TObject);
Begin
DoubleCall; // Имя процедуры, которая находится в dll
End;

Способ № 2:
Сложнее чем первый, но у него есть свои плюсы, а самое главное, что он идеально подходит для плагинов.
Для применения данного метода, первым делом объявляем несколько глобальных переменных:

Var
LibHandle: HModule; //Ссылка на модуль библиотеки
FirstCall: procedure; stdcall;
//Имена наших процедур лежащих в библиотеке.
DoubleCall: procedure; stdcall;

Затем после ключевого слова implementation напишем процедуру которая будет загружать нашу библиотеку:

После чего на форме создаем, обработчик событий OnCreate, в котором с помощью только что созданной процедуры мы загрузим нашу библиотеку

Procedure TForm1.FormCreate(Sender: TObject);
Begin
LoadMyLibrary(‘ Project2.dll ‘);
End;

Теперь опять же, для того, что бы вызвать необходимые процедуры из нашей библиотеки нам необходимо лишь вставить их названия в любое место кода. Для этого кидаем на форму 2 компонента Button с закладки Standart и создаем на каждой обработчик событий OnClick

OnClick первой кнопки:

Procedure TForm1.Button1Click(Sender: TObject);
Begin
FirstCall; // Имя процедуры, которая находится в dll
End;

OnClick второй кнопки:

Procedure TForm1.Button2Click(Sender: TObject);
Begin
DoubleCall; // Имя процедуры, которая находится в dll
End;

Ну и напоследок создаем обработчик событий OnDestroy на форме, в котором выгружаем dll библиотеку из памяти

Procedure TForm1.FormDestroy(Sender: TObject);
Begin
FreeLibrary(LibHandle);
//Выгружаем библиотеку из памяти.
End;

Вот и все ! Второй способ получился довольно громоздкий, но его плюс в уточнении хранящегося объекта в библиотеке.

P.S. Хотите вперед всех остальных посетителей сайта получать свежие Видео уроки, Аудио подкасты, статьи по Delphi.
Участвовать в конкурсах и постепенно вливаться в нашу команду ?!
Тогда прямо сейчас подписывайтесь на бесплатную мультимедийную рассылку сайта delphiexpert.ru
Нас уже больше чем 3500 человек ! Подписаться

Похожие материалы

  • Delphi Drop, перетаскивание строк в компоненте DBGrid
  • Delphi урок — Невидимая форма с видимыми компонентами
  • Видео урок — Delphi и MySql, подключение
  • Delphi изменяем миниатюру программы в Windows 7

Последние из рубрики

  • Видео урок — Delphi простейшая работа с PDF документацией (часть 2)
  • Delphi http://delphiexpert.ru/rabota-s-dll-bibliotekami.html» target=»_blank»]delphiexpert.ru[/mask_link]
Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru