37770

Розробка DLL-бібліотек

Лабораторная работа

Информатика, кибернетика и программирование

Тема: Розробка DLL-бібліотек. Мета: навчитись створювати DLL-бібліотеки та використовувати їх в додатках, засвоїти навички експорту функцій.

Украинкский

2013-09-25

4.3 MB

1 чел.

7

Міністерство освіти і науки України

Хмельницький національний університет

Кафедра системного програмування

Лабораторна робота №7

з програмування

на тему:

«Розробка DLL-бібліотек»

Виконав:

Студент групи КІ-10-1

Ноль М.Г.

Перевірив:

Мостовий С.В.

Хмельницький

2011

Лабораторна робота №7

Тема: Розробка DLL-бібліотек.

Мета: навчитись створювати DLL-бібліотеки та використовувати їх в додатках, засвоїти навички експорту функцій.

Завдання

Розробити DLL-бібліотеку для виконання операцій над динамічним однозв’язним списком.

DLL-бібліотека

Project1.lpr

library project1;

{$mode objfpc}{$H+}

uses

 Classes, sysutils

 { you can add units after this };

 type vkaz=^spysok;

      spysok=record

        num:real;

        next:vkaz;

      end;

{$IFDEF WINDOWS}{$R project1.rc}{$ENDIF}

procedure add(var a,head:vkaz; D:real); export;   

begin

if a<>nil then while a^.next<>nil do a:=a^.next;

if a=nil then begin new(a); head:=a; end

else begin new(a^.next); a:=a^.next; end;

a^.num:=D;   a^.next:=nil;

end;

exports add name 'add';

procedure Free(var a:vkaz; var head:vkaz); export;    

 var temp:vkaz;

begin   a:=head;

while a<>nil do begin    temp:=a;    a:=a^.next;    dispose(temp);    end;

a:=nil; head:=nil;

end;

exports Free name 'Free';

procedure searchPos(var a:vkaz; head:vkaz; D:real; var N:integer); export;  

begin   n:=1;     a:=head;

while (a<>nil) and (a^.num<>D) do begin a:=a^.next; inc(n); end;

if a=nil then n:=0;

end;

exports searchPos name 'searchPos';

function search(var a:vkaz; head:vkaz; D:real):vkaz;

begin    a:=head;

if a<>nil then    while (a<>nil) and (D<>a^.num) do a:=a^.next;  Search:=a;

end;

Procedure DelElem(var a,head:vkaz;tmp:vkaz);

  var tempa:vkaz;

begin a:=head;

if (a<>nil) and (tmp<>nil) then

 begin  if tmp=a then begin a:=tmp^.next; dispose(tmp); head:=a; end

 else  begin  tempa:=a;

         while tempa^.next<>tmp do tempa:=tempa^.next;

         tempa^.next:=tmp^.next;  dispose(tmp);

         end;

 end;

end;

procedure DelElemZnach(var a,head:vkaz; D:real); export;

   var temp:vkaz;

begin

 if a<>nil then  begin  temp:=Search(a,head,D);

 if temp<>nil then DelElem(a,head,temp);  end;

end;

exports DelElemZnach name 'delnum';

Procedure DelElemPos(var a,head:vkaz;pos:integer); export;

   var i:integer; tmp:vkaz;

begin

if (pos>0) and (a<>nil) then

 begin  i:=1;  tmp:=head;

 while (tmp<>nil) and (i<>pos) do begin tmp:=tmp^.next; inc(i) end;

 if tmp<>nil then DelElem(a,head,tmp);  end;

end;

exports DelElemPos name 'delpos';

begin

end.      

Програма з використанням бібліотеки

Project1.lpr

program lab7;

{$mode objfpc}{$H+}

uses

 {$IFDEF UNIX}{$IFDEF UseCThreads}

 cthreads,

 {$ENDIF}{$ENDIF}

 Interfaces, // this includes the LCL widgetset

 Forms, Unit1, LResources

 { you can add units after this };

{$IFDEF WINDOWS}{$R lab7.rc}{$ENDIF}

begin

 Application.Title:='Однозвязні списки';

 {$I lab7.lrs}

 Application.Initialize;

 Application.CreateForm(TForm1, Form1);

 Application.Run;

end.

Unit1.pas

unit Unit1;

{$mode objfpc}{$H+}

interface

uses

 Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, StdCtrls, ExtCtrls;

type

 vkaz=^spysok;

 spysok=record

 num:real;

 next:vkaz;

 end;

 { TForm1 }

 TForm1 = class(TForm)

   Button1: TButton;    Button2: TButton;    Button3: TButton;

   CB1: TCheckBox;

   Edit1: TEdit;

   Label1: TLabel;    Label2: TLabel;

   Memo1: TMemo;

   R1: TRadioButton;    R2: TRadioButton;    R3: TRadioButton;    R4: TRadioButton;

   procedure Button1Click(Sender: TObject);

   procedure Button2Click(Sender: TObject);

   procedure Button3Click(Sender: TObject);

   procedure CB1Change(Sender: TObject);

   procedure Edit1Change(Sender: TObject);

   procedure Edit1KeyPress(Sender: TObject; var Key: char);

   procedure FormCloseQuery(Sender: TObject; var CanClose: boolean);

   procedure FormCreate(Sender: TObject);

 private    { private declarations }

 public    { public declarations }

 end;

var  Form1: TForm1; list,head:vkaz;

implementation

procedure add(var a,head:vkaz; D:real); external 'project1.dll' name 'add';

procedure Freem(var a:vkaz; var head:vkaz);  external 'project1.dll' name 'Free';

procedure output(head:vkaz; var n:string); external 'project1.dll' name 'output';

procedure delnum(var a,head:vkaz; D:real); external 'project1.dll' name 'delnum';

procedure delhead(var a,head:vkaz; t:integer); external 'project1.dll' name 'delhead';

procedure searchPos(var a:vkaz; head:vkaz; D:real; var N:integer); external 'project1.dll' name 'searchPos';

{ TForm1 }

procedure output(head:vkaz);

begin    Form1.Memo1.Clear;

while head<>nil do

 begin Form1.Memo1.Caption:=Form1.Memo1.Caption+(FloatToStr(head^.num)+' ');

 head:=head^.next;

 end;

end;

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: boolean);

begin

 CanClose:=MessageDlg('Однозвязний список', 'Дійсно закрити?', mtConfirmation, [mbYes,mbNo], 0)=mrYes;

 Freem(list,head);

end;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: char);

begin

 case Key of

   #8,'0'..'9': ;

   '-': if Edit1.Text<>'' then Key:=#0;

   ',': begin if Length(Edit1.Text)-pos('-',Edit1.Text)=0 then Key:=#0;

        if pos(',',Edit1.Text)<>0 then Key:=#0;

        end

 else Key:=#0;

 end;

end;

procedure TForm1.Button3Click(Sender: TObject);

var i,n:integer; ch:real;

begin

 ch:=StrToFloat(Edit1.Text);

 if R1.Checked then

    begin add(list,head,ch); Button2.Enabled:=True;

    ShowMessage('елемент '+FloatToStr(ch)+' додано.');

    if CB1.Checked then Button1Click(Sender); end else

 if R2.Checked then begin delnum(list,head,ch);

    ShowMessage('елемент '+FloatToStr(ch)+' видалено.');

    if CB1.Checked then Button1Click(Sender); end else

 if R3.Checked then begin i:=StrToInt(Edit1.Text); delhead(list,head,i);

    if n>0 then ShowMessage('елемент номер '+FloatToStr(i)+' видалено.');

    if CB1.Checked then Button1Click(Sender); end else

 begin searchPos(list,head,ch,n); if n=0 then ShowMessage('Елемент відсутній у списку')

 else ShowMessage('Елемент у списку номер '+IntToStr(n)); end;

 Edit1.Clear;

end;

procedure TForm1.CB1Change(Sender: TObject);

begin  if CB1.Checked then Button1Click(Sender) else Memo1.Clear;

end;

procedure TForm1.Button1Click(Sender: TObject);

begin  output(head);

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

 Freem(list,head);  Button2.Enabled:=False;  Memo1.Clear;

end;

procedure TForm1.Edit1Change(Sender: TObject);

begin  Button3.Enabled:=not(Edit1.Text='');

end;

procedure TForm1.FormCreate(Sender: TObject);

begin  list:=nil; head:=nil;

 Button2.Enabled:=False; Button3.Enabled:=False;

 R1.Checked:=True;

end;

initialization

 {$I unit1.lrs}

end.


Висновок.  Виконавши лабораторну роботу, я засвоїв принципи створення DLL-бібліотек, зрозумів методи імпорту та експорту процедур і функцій з бібліотек, та на прикладі перевірив їх виконання. Також було закріплено навички щодо опрацювання однозв’язних динамічних списків, а саме додавання, пошук, видалення знайденого елемента, звільнення пам’яті (очищення списку).

 


 

А также другие работы, которые могут Вас заинтересовать

76501. Восстановление в родительских правах 18.79 KB
  Что касается правовой стороны восстановления в родительских правах то оно допустимо лишь в отношении несовершеннолетних так как напрямую связано с воспитанием ребенка. 72 СК восстановление в родительских правах уже невозможно. Восстановление в родительских правах допускается если родители один из них изменили: свое поведение; образ жизни; отношение к воспитанию ребенка.
76502. Ограничение родительских прав 17.55 KB
  При лишении родительских прав родители ребёнка утрачивают право на личное воспитание в том числе на общение; на получение мер социальной поддержки: пособий компенсаций льгот. При ограничении родительских прав отец и мать утрачивают права на личное воспитание и получение льгот но сохраняют право на общение с ребенком если такое общение не оказывает на ребенка негативного вредного влияния. В каких случаях суд можно ограничить мать и отца в родительских правах Если ребенок находится в опасной обстановке которая возникла не по вине...
76503. Алиментные правоотношения супругов и бывших супругов 18.09 KB
  Супруги вправе заключить соглашение об уплате алиментов. проживающие как супруги без официальной регистрации брака в органах загса могут заключить соглашение о предоставлении содержания на которые нормы СК РФ регулирующие соглашения об уплате алиментов будут распространяться в порядке аналогии закона. В случае отказа от материальной поддержки и отсутствия соглашения между супругами об уплате алиментов право требовать предоставления алиментов в судебном порядке от другого супруга обладающего необходимыми для этого средствами имеют: а...
76504. Алиментные правоотношения родителей и детей 21.08 KB
  80 СК РФ Родители обязаны содержать своих несовершеннолетних детей.27 ГК РФ обязанность родителей содержать своих детей прекращается ст. Гражданский кодекс РФ наделяет детей достигших 14-летнего возраста заключать соглашение об уплате алиментов с согласия своего родителя или иного законного представителя ст.
76505. Алиментные правоотношения родителей и совершеннолетних детей 19.06 KB
  И здесь следует остановиться на соглашении об уплате алиментов. Соглашение об уплате алиментов – способ добровольной уплаты алиментов. Родители вправе заключить соглашение о предоставлении алиментов своим совершеннолетним детям независимо от их нетрудоспособности и нуждаемости.
76506. Алиментные правоотношения других членов семьи 17 KB
  Трудоспособные совершеннолетние братья и сестры обладающие необходимыми средствами обязаны содержать своих нуждающихся в помощи несовершеннолетних братьев и сестер в случае невозможности получения ими содержания от своих родителей а также нетрудоспособных нуждающихся в помощи совершеннолетних братьев и сестер если они не могут получить содержание от своих трудоспособных совершеннолетних детей супругов бывших супругов или от родителей ст. 94 СК РФ предусмотрена алиментная обязанность дедушки и бабушки в отношении своих внуков. К...
76507. Соглашение об уплате алиментов (понятие, форма, содержание, правовое значение) 17.43 KB
  Заключить соглашение может также лицо не являющееся алиментообязанным когда нет оснований для назначения алиментов в судебном порядке. Соглашение об уплате алиментов должно быть заключено в письменной форме с последующим нотариальным удостоверением п. В содержании соглашения об уплате алиментов должны быть указаны размер алиментов; порядок и способы их уплаты.
76508. Порядок взыскания и уплаты алиментов 19.8 KB
  2 ст 104 Семейного кодекса РФ установлены следующие способы уплаты алиментов: долевой в процентах к заработку и или доходу плательщика; в твердой сумме уплачиваемой периодически; в твердой сумме уплачиваемой единовременно; путем предоставления имущества это может быть единовременно или периодически в согласованные периоды; смешанные варианты. 81 Семейного кодекса Российской Федерации размер алиментов зависит от материального или семейного положения сторон и иных заслуживающих внимания обстоятельств. Взыскание алиментов...
76509. Взыскание задолженности по алиментам 17.93 KB
  Задолженность по уплате алиментов может образоваться в двух случаях: Судом установлен размер алиментов в твердой денежной сумме однако алиментообязанное лицо по какимто причинам не платит положенные алименты. Судом установлен размер алиментов в процентах от заработка однако алиментообязанное лицо нигде не работает и не получает иного дохода. В первом случае расчет задолженности по алиментам не составляет особого труда: необходимо умножить количество месяцев в течение которых не производилась уплата алиментов на твердую денежную сумму...