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

 


 

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

62197. Сложение векторов. Разложение вектора по двум неколлинеарным векторам. Скалярное произведение двух векторов 76.56 KB
  Сложение векторов. Тип урока: Закрепления знаний. Ход урока: Организационный момент; Актуализация знаний; Решение задач; д з. Этапы урока Деятельность учителя Психологический анализ Организационный момент Все ли получилось в домашней работе.
62199. Психологічний аналіз уроку 18.77 KB
  Вчителька розповідає учням новий матеріал показує практичне значення матеріалу. Вчителька пояснює суть нового матеріалу. На певних етапах увага учнів розсіювалася і вчителька старалась привернути їх увагу використовуючи різні таблиці. Вчителька вміло переключала учнів з одної уваги на іншу.
62200. Психологічний аналіз уроку. Практичне заняття 18.63 KB
  Мета: ознайомити з гігієнічними вимогами до проведення уроку опрацювати схему психологічного аналізу уроку. План Гігієнічні вимогами до проведення уроку. Схема психологічного аналізу уроку.