Урок 29 - Работа с DLL

   В этом уроке мы ознакомимся с динамическими библиотеками Windows. Научимся её использовать и создавать.

   Файл динамической библиотеки Windows имеет расширение .dll, вы наверняка сталкивались с такими файлами. Библиотеки имеют ряд плюсов в сравнении с обычным .exe файлом:

  1. Экономия системной памяти
  2. Можно хранить картинки, файлы и тд.
  3. Быстрое обновление программы


   Например наша программа работает и использует определённый алгоритм действий, этот алгоритм записан в dll и при обновлении этого алгоритма достаточно заменить библиотеку с этим алгоритмом на новую, а так бы пришлось заново скачивать все программу целиком.

   Создается библиотека очень просто, открываем Delphi и выбираем File->New->Other->DLL Wizard и вот у нас появилась область кода, сразу стоит заметить, что нельзя использовать формы и компоненты, только ресурсы, функции и процедуры. Мы будем делать калькулятор, но все действия будут записаны в dll. Итак определимся с видом нашей функции: function calc(a, b, index: integer): integer; a и b это наши числа с которыми необходимо произвести действие, про index я расскажу немножечко позже. Над begin и под {R *.res} напишем нашу функцию:
function calc(a, b, index: integer): integer;
begin
if index = 0 then //если index = 0 то сложим числа
	Result:= a + b;
if index = 1 then //если index = 1 то вычтем из 1 числа 2 число 
	Result:= a - b;	
end;
exports calc;  //Позволим другим программам использовать эту функцию
   Теперь скомпилируем библиотеку, но для начала нужно где-нибудь сохранить проект и назовём его "dll", сохраняем и компилируем... вылезла ошибка. Это говорит о том, что все готово, мы просто компилируем без параметра, в папке куда мы сохранили появилась библиотека "dll.dll". Все с библиотекой закончили, теперь надо создать сам калькулятор который будет использовать нашу библиотеку. Создаем новый проект и сохраняем в ту же папку где и dll. Создаем вот такую форму:

Форма


   Добавим элементы для ComboBox1, кликаем на свойство Items и делаем тоже самое:

Действия


   И сразу после implementation объявляем нашу функцию:
 
function calc(a, b, index: integer): integer; external 'dll.dll';  //Говорим компилятору что эта функция находится в dll.dll
   В событии Button1 OnClick пишем код:
 
label1.Caption:= IntToStr(calc(StrToInt(Edit1.Text), StrToInt(Edit2.Text), ComboBox1.ItemIndex));
   Все теперь запускаем программу, вводим числа, выбираем действие и нажимаем на кнопочку, в Label1 выводится результат:

Результат


Удачи!
Встретимся в следующем уроке!




Добавил(а): Needle Дата: 2014-02-14
ой хороооош! спасииибочки!



Добавил(а): Kopeheb Дата: 2015-01-31
но хотелось бы(я еще не все уроки просмотрел) найти как мне записать в dll формулу(ы), которые: одна: суммирует SUM(от Edit1 до Edit31) вторая: (результат_SUM+Edit32-Edit33-Edit34) / (либо ComboBox2(с двумя значениями) Edit35 * 100 кароч, замыслило программку написать которая считает: и желательно куда то записывает результаты в(.xls) с сохранением предыдущих записей. Конечно же, наверняка, такое лучше реализовать с таблицами, но пока понятного примера не нашел. и еще вопросы: созданная по уроку dll, после редакции нужно компилировать в новую dll или можно в эту же?



Добавил(а): Kopeheb Дата: 2015-01-31
редакция строчки (либо ComboBox2(с двумя значениями) ЛИБО Edit35 * 100



Добавил(а): nur7 Дата: 2015-09-08
Undeclared stream!



Добавил(а): sashf1999 Дата: 2016-04-23
хммм, интересненький способ


  1. финти
    финти 10 months ago
    Result:=(a/b); ругается на эту строчку не компелирует
  2. Юрий
    Юрий 8 months ago
    function calc(a, b, index: integer): Real;
    begin
    if index = 0 then //если index = 0 то сложим числа
    Result:= a + b;
    if index = 1 then //если index = 1 то вычтем из 1 числа 2 число
    Result:= a - b;
    if index = 2 then
    Result:= a/b; // не работает
    if index = 3 then
    Result:= a*b;

    end;
    exports calc; //Позволим другим программам использовать эту функцию
  3. Егор
    Егор 6 months ago
    Function Calc(A, B : real; Op : integer) : real;
    begin
    case op of
    1: result := A - B;
    2: result := A * B;
    3: result := A / B;
    else
    result := A + B;
    end;
    end;
    работает
  4. Juliaanek
    Juliaanek 2 months ago
    Каталог качественной косметики для макияжа и ухода в интернет-магазинах
Отменить.