procedure TForm2.ServerSocket1Listen(Sender: TObject;
Socket: TCustomWinSocket);
{ Ожидание подключения клиентов }
begin
ListBox1.Items.Text:='Server is active…';
end;
ЛЕКЦИЯ №6
1. РАЗРАБОТКА DLL – БИБЛИОТЕК
Язык программирования Delphi является языком визуального объектно-ориентированного программирования (ООП). В современных программах, совместно с ООП, очень часто используется и модульный принцип создания программ. Наибольшее развитие данная технология получила в форме разработки динамически загружаемых DLL-библиотек. DLL-библиотека представляет собой отдельный файл с расширением «DLL», в котором находятся какие-либо процедуры и функции. Они становятся доступными при подключении к программе DLL-файла.
При подключении DLL-библиотеки к программе она загружается в оперативную память компьютера и находится там до завершения программы. Если запускается несколько программ, и всем им нужна одна и таже DLL-библиотека, то она загрузится в память в одном экземпляре, а выгрузится из памяти при закрытии последней (использующей библиотеку) программы.
При одновременной работе нескольких программ с одной и той же DLL-библиотекой обеспечивается независимость переменных DLL-модуля для каждой прикладной программы. Таким образом получается, что процедуры и функции загружаются в одном экземпляре, а переменные DLL копируются для каждой прикладной программы отдельно.
Прикладная программа на Delphi может подключать DLL-библиотеку двумя способами: динамическим и статическим. При статическом способе DLL-библиотека автоматически подключается при запуске программы и автоматически деактивируется при ее завершении. Если указанный DLL-файл будет не найден, то возникнет ошибка выполнения программы. При динамическом способе DLL-библиотека подключается и отключается в нужное программисту время, при этом обеспечивается контроль над ошибочными ситуациями (например, если DLL-файл не найден).
Для создания файла DLL в Delphi необходимо выбрать пункт меню: «File -> New Item -> DLL wizard». Исходный код DLL-библиотеки нужно набрать в открывшимся окне и сохранить как файл с расширением «DPR». Никакие формы и файлы с расширение «PAS» здесь не используются.
Для одновременной отладки и создания программы и DLL-библиотеки лучше всего запустить две копии «Delphi» и в них работать отдельно.
1.1. Пример простейшей библиотеки DLL
library demo_dll;
function sc(x: real): real export; stdcall; { Функция расчета }
begin
xsin:=sin(x)+ cos(x);
end;
exports sc; { Экспорт процедур и функций для внешних программ }
begin { Секция инициализации библиотеки DLL }
end.
end.
1.2. Пример использования библиотеки DLL
unit Demo_dll;
…
var Form1: TForm1;
function sc(x: real): real; stdcall; external 'demo_dll.dll'; { Подключение функции из DLL-библиотеки }
implementation
procedure TForm1.Button1Click(Sender: TObject);
begin
showmessage(floattostr(sc(5)));
end;
1.3. Пример расширенной библиотеки DLL
library repa;
uses SysUtils, Classes, Windows, Registry, StdCtrls;
procedure Save1(edit1_text: pchar; mm1: pchar; scrollbar1_position: integer); export; stdcall;
// Сохранение данных в реестр
var nfile, s: string; t: tregistry; i,k: integer; m1: tstrings;
begin
m1:=TStringList.Create; m1.Text:=mm1;
t:=tRegistry.Create;
t.RootKey:=HKEY_CURRENT_USER;
t.OpenKey('\Software\is-302\tsn-12', true);
t.writestring('', 'repa.dll');
t.WriteString('Edit1_text', edit1_text);
k:=m1.count;
t.WriteInteger('memo1_count', k);
for i:=0 to m1.Count-1 do begin