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

Інформація про навчальний заклад

ВУЗ:
Інші
Інститут:
Не вказано
Факультет:
КН
Кафедра:
Не вказано

Інформація про роботу

Рік:
2011
Тип роботи:
Лабораторна робота
Предмет:
Програмування

Частина тексту файла (без зображень, графіків і формул):

Міністерство освіти і науки України Хмельницький національний університет Кафедра системного програмування Лабораторна робота №7 з програмування на тему: «Розробка DLL-бібліотек» Лабораторна робота №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-бібліотек, зрозумів методи імпорту та експорту процедур і функцій з бібліотек, та на прикладі перевірив їх виконання. Також було закріплено навички щодо опрацювання однозв’язних динамічних списків, а саме додавання, пошук, видалення знайденого елемента, звільнення пам’яті (очищення списку). / / /
Антиботан аватар за замовчуванням

28.03.2013 22:03-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!