Работа с DLL в Delphi
Рассмотреть как все это происходит, я предлагаю на сквозном примере, сложения двух чисел, где собственно процедура самого сложения будет находиться в файле dll.
Итак приступим:
- Запускаем Delphi и создаем новый проект;
- Размещаем на форме 3 компонента Edit, 2 компонента Label, 1 компонент Button, и настраиваем примерно как представлено, затем компилируем и сохраняем;
- Далее заходим в пункт меню File -> New -> Other -> Dynamic-linc Library, жмем Ок и сохраняем все в папке с нашим проектом, только изменяем имя сохраняемого на Project2.
- В открывшемся листинге, текст между разделами library Project2 и uses, можно удалить, после значения {$R *.res}, создаем нашу функцию сложения и описываем ее:
1 2 3 4 5 6 7 8 9 10 11 |
Function summ(a,b:Integer):Integer; StdCall; //Называем ее именем summ, тип переменных Integer, выходной параметр тоже Integer, //StdCall - говорит о стандартном способе вызова, то-есть о совместимости с Windows API, //если его не указать то сторонние разработчики ПО будут испытывать сложности //с подключением к нашей библиотеке, если мы не планируем, чтобы кроме нас библиотеку //кто то использовал еще, то можно его и не указывать, но мы укажем begin result:=a+b; //Ну а тут пишем, что наша функция должна выполнять; end; |
- После того как мы описали нашу функцию, под оператором end; пишем:
1 2 3 |
exports summ; //Здесь ключевое слово expotrs, позволяет экспортировать нашу функцию summ, //чтобы ее можно было использовать извне, то-есть из любых программ |
Код нашей DLL:
- Компилируем нашу библиотеку, соглашаемся с сообщением, что компилируем ее без параметров, закрываем наш Project2 и открываем Project1.dproj, а на вопрос о сохранении изменений в Project2.dproj, жмем Ok.
Еще маленький нюанс…
-
Заходим в папку с нашим проектом, у нас такой путь:
-
C:\Users\User\Documents\RAD Studio\Projects\.dll в Delphi\Win32\Debug\Win32\Debug
-
и копируем от туда скомпилированную библиотеку — Project2.dll в общую папку с проектом, у нас такой путь:
-
C:\Users\User\Documents\RAD Studio\Projects\.dll в Delphi …чтобы наша программа смогла ее найти!!!
- Далее прописываем в наш открывшийся проект созданную нами функцию, для этого после значения {$R *.res} раздела implementation , пишем:
1 2 |
Function summ(a,b:Integer):Integer; StdCall; External 'Project2.dll'; //Здесь External 'Project2.dll' говорит о том, что описание функции мы берем извне, то-есть из созданного нами .dll файла |
- Создаем обработчик событий OnClick на нашей кнопке, где прописываем следующее:
1 2 3 4 5 6 7 8 |
var c:Integer; //Здесь с - промежуточная переменная, куда будет помещаться результат работы нашей функции; begin c:=(Summ(StrToInt(Edit1.Text),StrToInt(Edit2.Text))); //Тут, мы в качестве первого параметра функции указываем содержимое Edit1, а второго - //Edit2, и помещаем результат в переменную с Edit3.Text:=IntToStr(c); //Выводим результат в Edit3; end; |
- Запускаем проект, вводим значения в первые два эдита, жмем — «Посчитать» и если вы все выполняли внимательно, то в Edit3, отобразится сумма введенных нами чисел.