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

 


 

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

43614. ОСОБЕННОСТИ ПРОВЕДЕНИЯ ЯРМАРОК И ВЫСТАВОК НА ПРИМЕРЕ РЕКЛАМНО - ВЫСТАВОЧНОЙ КОМПАНИИ «ДОМИНАНТА» 133.05 KB
  Особенно эффективны выставки и ярмарки в сочетании с комплексом сопутствующих мероприятий рекламной кампанией в прессе проведением презентаций прессконференций круглых столов встреч со специалистами и т. В эти годы стали проводиться всемирные выставки. Ярмарки и выставки пользуются большой популярностью и в Северной Америке и в частности в США; достаточно сказать что в 80е годы суммарная выставочная площадь увеличилась на 43. Наиболее крупными международными ярмарками и выставками проводимыми в развивающихся странах являются...
43615. Введение в геодезию 582 KB
  Геодезия - это наука, изучающая форму и гравитационное поле Земли, планет солнечной системы, методы и способы определения положения точек в принятой системе координат и занимающаяся точными измерениями на местности, необходимыми для создания карт и планов земной поверхности
43616. Технология производства мягкой дидактической игрушки 84.57 KB
  Поэтому детские игрушки это не просто способ занять малыша но и важный момент в воспитании маленького человека. Типы характер содержание и оформление игрушки определяются конкретными воспитательными задачами применительно к возрасту детей с учётом их развития и интересов. Как произведения декоративноприкладного искусства игрушки особенно национальнотрадиционные используются в качестве декоративных элементов в современном интерьере. Игрушки позволяют также более естественно организовать общение ребёнка с родителями что является в...
43617. Исследование деятельности предприятия по повышению своей конкурентоспособности на примере ОАО «Вестел-СНГ» 356.86 KB
  Сегодня уровень конкурентоспособности предприятий является определяющим для характера и качества развития страны. Актуальность выбранной темы заключается в том что каждое предприятие должно заботиться о конкурентоспособности своего товара. Цель дипломного проекта исследование деятельности предприятия по повышению своей конкурентоспособности. теоретические основы конкурентоспособности предприятия и товаров 2.
43619. Проектирование водопроводной сети населенного пункта с промышленным предприятием и гидравлический расчет этой сети 599.46 KB
  Определение расчетных суточных расходов воды. Режим расходования воды. Для этого необходимо запроектировать кольцевую сеть то есть произвести трассировку сети на генплане определить расчетные расходы от населенного пункта и промышленного предприятия объемы водонапорной башни резервуаров чистой воды а также необходимо определить расчетные режимы работы сети и расчетные расходы для них свободные и пьезометрические напоры в сети напоры насосов высоту водонапорной башни. Водопроводная сеть расположена в...
43620. ИССЛЕДОВАНИЕ ХАРАКТЕРИСТИК ГЕНЕРАТОРА «ГНОМ-3» 273.5 KB
  Работа технических средств обработки информации сопровождается побочными электромагнитными излучениями и электрическими наводками. Эти излучения и наводки могут быть носителями опасных (информативных) сигналов и приводят к образованию соответствующих технических каналов утечки информации.
43621. Управление мотивацией персонала на примере ГУП “Таткоммунпромкомплект” 943.46 KB
  Анализ деятельности предприятия ГУП âТаткоммунпромкомплектâ. Вместе с тем работающие предприятия имеют свои мотивационные модели практическое использование которых позволяет им держаться на плаву и даже увеличивать объем производства. Применяются ли они на наших предприятиях кроме конечно чисто русской модели кнута и пряника К сожалению нет. Таким образом учитывая вышеизложенное нами выше можно сделать следующий вывод: весь персонал предприятия условно можно подразделить на определенные...
43622. Разработка коробки скоростей токарно-револьверного станка 979.5 KB
  К достоинствам схемы относятся высокий КПД, удобство монтажа и демонтажа. К недостаткам – неравномерное распределение нагрузки вдоль зуба и неодинаковое давление на подшипники (установленные на разных концах вала) от окружного усилия и веса колёс.