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

 


 

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

63243. Східний похід Олександра Македонського та утворення його імперії 24.48 KB
  Мета: розглянути основні етапи східного походу Олександра Македонського та утворення найбільшої монархії давнини; надати учням можливість оцінити історичну особистість.
63244. Елліністичні держави в IV—II ст. до н. є. Елліністична культура 23.02 KB
  Мета: розкрити суть еллінізму; дати коротку характеристику елліністичних держав; визначити основні причини розквіту культури і науки часів еллінізму розглянути їхні основні досягнення.
63245. Урок узагальнення з теми «Еллінізм» 19.64 KB
  Очікувані результати Після цього уроку учні зможуть: називати час політичної роздробленості Греції існування імперії Александра Македонського та елліністичних держав дати правління Філіппа II та Александра Македонського історичних діячів...
63247. Природні умови Італії та виникнення Риму 25.85 KB
  Після цього уроку учні зможуть: називати час виникнень Риму; показувати на карті Апеннінський півострів місто Рим; застосовувати та пояснювати на прикладах поняття та терміни: патриції плебеї сенат; пояснювати причини ліквідації царської влади і встановлення республіки...
63248. Римська республіка V — середини III ст. до нашої ери 34.95 KB
  Мета: розглянути боротьбу плебеїв і патриціїв у Римі визначити вплив її результатів на перетворення Риму на одну з найсильніших держав Західного Середземноморя; дати уявлення про особливості організації влади та суспільного устрою часів Римської республіки.
63250. Урок узагальнення з теми: Давній Рим у VIII—І ст. до нашої ери 23.88 KB
  Після цього уроку учні зможуть: називати час утворення Римської республіки завоювання Римом Італії виникнення Риму війн Риму з Карфагеном установлення диктатури Сулли повстання Спартака першого тріумвірату історичних осіб цієї доби основні джерела рабства...
63251. Диктатура Юлія Цезаря 25.34 KB
  Після цього уроку учні зможуть: називати час громадянської війни в Римі диктатури Гая Юлія Цезаря; показувати на карті напрями походів Гая Юлія Цезаря; застосовувати та пояснювати на прикладах поняття диктатор...