Приветствую Вас Заглянувший | RSS

Подработка и работа в интернете

Среда, 02.09.2026, 04:39
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Основы Dll для начинающих
NIKIOPДата: Пятница, 30.03.2012, 12:08 | Сообщение # 1
Знаток
Группа: Свой человек
Сообщений: 63
Репутация: 4
Понимая как начинающему не просто самому понять как создавать динамические библиотеки (Dynamic Link Library),я решил написать эту статью, в которой постараюсь раскрыть основные принципы работы с Dll в Delphi.

Для начала нужно знать почему в некоторых случаях лучше сделать Dll,а не просто Модуль. Возможно в нескольких ваших приложениях окажется одинаковый блок кода, не совсем малых размеров, вы можете сделать Модуль и подключить к каждому проекту, но размер EXE файла будет больше, нежели когда вы создадите одну Dll, и будете её использовать во многих программах. Когда вы работаете с динамической библиотекой, вы значительно экономите память, так как в нее загружается всего один экземпляр Dll для всех программ.
Что же могут Динамические библиотеки:
-Хранить в них звуки,картинки,иконки,курсоры и многое другое
-Использоваться в качестве плагинов (для того чтобы не редактировать сам файл программы)
-Помещать туда диалоговые,простые окна;меню и всевозможные другие ресурсы
-Давать возможность другим программистам использовать вашу библиотеку на других языках

Перейдем от теории к практики.

Напишем Dll, которая будет содержать в себе две математические функции:
1)Вычисление Факториала числа.
2)Нахождение суммы двух чисел.

Для начала нужно создать Dll в дельфи, для этого делаем следующее:
File->New->Other->Dll Wizard
Появится проект вашей новой Dll.

Теперь напишем наши две функции:

Код Delphi
function Fucktorial(N:integer):integer;stdcall;
var p:integer;
begin
for p:=1 to N do N:=N*P;
Result :=N;
end;

function Symma(a,b:integer):Integer;stdcall;
begin
Result :=a+b;
end;
После каждой функции вы можете заметить что стоит stdcall,эта деректива предписывает использование стандартных соглашений о вызове функций, конечно это не обязательно.

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

Код Delphi
exports Fucktorial,Symma;
Теперь когда Dll готова, сохраним её под именем Math(Имя конечно может быть любое)
File->Save Project As

Неявная(статическая) загрузка
Осталось создать приложение, которое будет использовать функции нашей Dll
File->New->Application

Для примера я поместил на форму: два TEdit, два TButton, один TLabel

После ключегого слова implementation объявим наши функции таким образом

Код Delphi
function Symma(a,b:integer):Integer;stdcall;external 'Math.dll';
function Fucktorial(N:integer):integer;stdcall;external 'Math.dll';
Как можно заметить здесь присутствует незнакомое слово external.Так мы определяем где находится наша функция,и откуда её вызывать.В нашем проекте мы вызываем функции из только что созданной Dll.

Напишем код в наши Button

Код Delphi
//суммирование двух чисел
procedure TForm1.btn1Click(Sender: TObject);
var a,b,c:integer; //переменные для чисел
begin
a:=StrToInt(edt1.text);
b:=StrToInt(edt2.text);
C:=Symma(a,b);
lblResult.Caption := 'Результат:' + IntToStr©;
end;

//расчет факториала
procedure TForm1.btn2Click(Sender: TObject);
var N:Integer;
begin
N:=StrToInt(edt1.text);
lblResult.Caption := 'Результат:' + IntToStr(Fucktorial(N));
end;
Теперь осталось скомпилировать приложение и можно проверять его работу.

Теперь нужно сказать пару слов о проблемах,которые могут возникнуть.

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

и ваша программа сразу завершит свою работу, это недостаток неявной(статической) загрузки Dll,далее мы рассмотрим как этого избежать с помощью явной(динамической) загрузкой.
 
  • Страница 1 из 1
  • 1
Поиск: