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

 


 

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

32252. ТЕХНОЛОГИЯ МОНТАЖА БОЛЬШЕПРОЛЕТНЫХ КОНСТРУКЦИЙ ЗДАНИЙ И СООРУЖЕНИЙ Возведение зданий с каркасом рамного типа 50 KB
  В производственных зданиях вместо мостовых кранов устанавливают один или два многоопорных подвесных крана грузоподъемностью по 3050 т передвигающихся вдоль пролета по монорельсовым путям подвешенным в узлах нижнего пояса ригеля. В связи с большими постоянными и подвижными нагрузками конструктивное решение ригеля принимают аналогично тяжелым мостовым фермам с поясами и решеткой из двухступенчатых Нобразных сечений. При пролетах более 50 м масса стропильной конструкции ригеля достигает 60 т и более монтаж ее может быть выполнен либо...
32254. Монтаж стальных конструкций укрупненными блоками 63 KB
  Высота конструкций центрального блока доменной печи доходит до 70 м при массе стальных конструкций сконструированных на сравнительно небольшой площади до 5000 т и более. Монтаж таких конструкций может быть выполнен либо частями с применением временных промежуточных опор либо целиком укрупненными блоками. Укрупнительную сборку стальных конструкций выполняют на строительной площадке если целесообразно собрать монтажный блок из нескольких элементов до подъема и полнее использовать грузоподъемность монтажного крана.
32255. Возведение зданий с перекрестно-стержневыми покрытиями 628 KB
  Структурные плитыграни собирали на стройплощадке из отдельных короткомерных стержневых трубчатых элементов поставляемых на стройку в пакетах. Перемещать отдельные грани из предмонтажного положения в проектное предлагалось по рельсовым направляющим уложенным на монтажной площадке и опорахпилонах. Грани покрытия монтировали с помощью двух кранов ДЭК50 и одного крана СКГ100. При монтаже структурных граней ПР1 ПР2 ПР3 основания каждой грани стропили по линии расположения опорных узлов за две точки к кранам ДЭК50 и крану...
32256. Монтаж зданий с арочными и купольными покрытиями 862.5 KB
  Наиболее часто проектируют арки следующих статических схем: с затяжкой воспринимающей усилие горизонтального распора благодаря которой колонны здания воспринимают только вертикальные нагрузки; двух либо трехшарнирные передающие вертикальные нагрузки и распор на железобетонные фундаменты. Число временных опор зависит от пролета арки объемнопланировочного решения не всегда есть возможность установки опор в любом месте и имеющегося монтажного оборудования. Минимальное количество монтажных элементов будет достигнуто в том случае если...
32257. Трехшарнирные арки 29 KB
  Полуарки укрупненные на стеллажах из отдельных железобетонных элементов подают в зону действия крана на двух тележках. Под нижний конец полуарки подводят специальную тележку передвигаемую но рельсам уложенным перпендикулярно продольной оси здания. Гнезда фундаментов под полуарки должны находиться между рельсами. Монтаж начинают с подъема части полуарки.
32258. Монтаж сборно-монолитных оболочек » Монтаж строительных конструкций 269 KB
  Различают два основных принципа сборки сборномонолитных оболочек: сборку на уровне земли на специальном кондукторе с последующим подъемом цельнособранной оболочки в проектное положение с помощью домкратов или кранов; сборку на проектных отметках основной технологический метод строительства оболочек в нашей стране рис. Сборку на проектных отметках осуществляют двумя способами: на монтажных поддерживающих устройствах и с опиранием укрупненных элементов оболочки на несущие конструкции здания. В пролете или одновременно в нескольких пролетах...
32259. Мембранные системы 22.5 KB
  Мембранные покрытия применяются не только при сооружении уникальных сооружений крытых стадионов выставочных павильонов но и при возведении здании массового строительства киноконцертных и спортивных залов универсального типа больших магазинов рынков. Мембранные системы могут быть также широко использованы в ограждающих конструкциях стен кровель подвесных потолков.