Динамикалық кітапханалар

Автор работы: Пользователь скрыл имя, 06 Апреля 2014 в 10:25, курсовая работа

Описание работы

Бағдарламалау технологиясының дамуына байланысты көптеген адамдар өздерінің бағдарламаларының мүмкіндіктерін жоғарлату қателіктерімен соқтығысып жатады. Осы менің курстық жұмысым осы сұраққа арналған, яғни Borland Delphi тілінде DLL – ді бағдарламауға. Сонымен қоса, DLL кітапханаларын пайдалану туралы сұрақтарды қарастырғанда, біз басқа DLL – дан импорттауды да қарастырып кетеміз.

Файлы: 1 файл

курсовой исрп.doc

— 586.00 Кб (Скачать файл)

МАЗМҰНЫ

 

 

 

 

КІРІСПЕ

 

Бағдарламалау технологиясының дамуына байланысты көптеген адамдар өздерінің бағдарламаларының мүмкіндіктерін жоғарлату қателіктерімен соқтығысып жатады. Осы менің курстық жұмысым осы сұраққа арналған, яғни Borland Delphi тілінде DLL – ді бағдарламауға. Сонымен қоса, DLL кітапханаларын пайдалану туралы сұрақтарды қарастырғанда, біз басқа DLL – дан импорттауды да қарастырып кетеміз.

Динамикалық кітапхана жайында курстық жұмыс барысында толық түсіндіреміз. Динамикалық кітапханаға кіріспе бере кететін болсақ, алдымен біз динамикалық кітахананың қандай аймақтарда қолданылатыны айта кетейік.

Енді DLL кітапханалар не үшін керек және қай жерде қолданылады деген сұраққа жауап берейік, олардың қолданылатын жерлерінің кейбіреулеріне тоқталып кетейік:

- Бағдарламалаушы үшін қажетті қосымша функцияларды құрайтын жекелеген кітапханалар. Мысалы, жолдармен жұмыс жасайтын функциялар, немесе суретті өндейтін қиын кітапханалар.

- Ресурстарды сақтайтын жер. DLL-де тек қана программаларды және функцияларды сақтауға болмайды, сонымен қатар барлық мүмкін болатын ресурстарды- иконкілерді, суреттерді, жолдық массивтерді, менюді және т.б. сақтауға болады.

- Қолдау кітапханалары. Бұл кітапханаларға мысал ретінде бәрімізге белгілі: DirectX, ICQAPI (API для ICQ), OpenGL және т.б. пакеттерді жатқызуға болады.

- Бағдарлама бөліктері. Мысалы, DLL-де бағдарлама терезесін (формаларды) және т.с.с. сақтауға болады.

- Плагиндер (Plugins) – бағдарламаушының ойы үшін нағыз қарайтын жер осы плагиндерде. Плагиндер бағдарламаға оның мүмкіндіктерін кеңейтетін қосымша.

- Бөліп тұратын ресурс. DLL (Dynamic Link Library) бірден көптеген бағдарламаларда және процесстерде (sharing – бөліп тұратын ресурс) қолданыла алады.

Динамикалық кітапханалардың жалпылама қолданылатын жерлерін жалпылама айта кеттік, енді динамикалық кітапхана туралы курстық жұмыс барысында айта кетерміз. Сонымен қоса, бұл жұмыста Borland Delphi программалау ортасында DLL құру жайында және құрылған динамикалық кітапханаларды құрған мысалдарын көрсетіп кетеміз.

 

 

1. ДИНАМИКАЛЫҚ  КІТАПХАНА ТУРАЛЫ ЖАЛПЫ ТҮСІНІК

 

1.1 Модульдер

 

 

Модуль – бұл өзіне интерфейстік бөлімнің әртүрлі компоненттерін және инициалданатын бөлімнің кейбір орындалатын операторларын қосатын автоматты компиляцияланатын бағдарламаның бірлігі. Интерфейстік бөлімде объектілердің пайда болуы оларды басқа модульдер және негізгі бағдарламалар үшін қол жетімді қылады. Процедура мен функцияның денесі модульдің орындалатын бөлігінде орналасады. Ол пайдаланушыдан жасырын тұруы мүмкін. 

Delphi де модульдің рөлі  тек қана жеке компиляция механизмімен  шектелмейді. Delphi әрбір қосылған  бағдарламаны өзіне сай модульмен  байланыстырады және терезенің  барлық қасиеттерін жеке бағдарламалық  бірлікте локальдайды. Бағдарламаның барлық негізгі жұмысы модульде жататын кодтармен басқарылады.

 

Модульдер құрылымы:

 

Модуль келесі құрылымдардан тұрады:

 

Unit <имя>;

 

interface

 

<интерфейстік бөлім> implementation

 

<орындалатын бөлім> initialization <иницияланатын бөлім> finalization <аяқталатын бөлім>

 

end.

 

Мұнда unit – резервтелген сөз (бірлік); модульдің тақырыпшасын бастайды; <аты> - модуль аты (дұрыс идентификатор); interface – резервтелген сөз (интерфейс); модульдің интерфейстік бөлімін бастайды; implementation – резервтелген сөз (орындалуы); орындалатын бөлімді бастайды; initialization – резервтелген сөз (инициация); модульдің инициалданатын бөлімін бастайды; finalization – резервтелген сөз (аяқтау); модульдің аяқталатын бөлімін бастайды; end – резервтелген сөз; модульдің аяқталуының белгісі.

Демек, модуль тақырыпшадан және төрт құрылымдық бөлімнен құрылады. Бұл құрылымдық бөлімдердің кейбіреуі бос болуы мүмкін.

 

1.2 DELPHI - дегі модульдер типтері

 

 

Форма Delphi-дегі кең тараған модуль типі болып саналады. Мұндай модульдің интерфейстік бөлімі әдетте жаңа классты хабарлауды және Delphi дің терезені конструктрлеу барысында автоматты түрде жаңаруын құрайды. Форма модулінің интерфейстік бөлімінде сәйкес терезелік класс үшін объектіні хабарлауда болады.

Формалардан басқа репозиторияда көрсетілген тереземен байланыспаған модульдерде болады. Жоғарыда көрсетілген модульден басқа оларға деректер модулі де жатады. Ондай модулге динамикалық кітапхана, пакеттер және құйындар модулі жатады.

Деректер модулі олармен байланысқан терезелерден тұрады, бірақта, бұл терезелер ешқашан экранға шықпайды.

Динамикалық кітапхана модулдері Windows - те кең қолданылатын бір бірімен динамикалық байланысқан DLL (Dynamic-Link Libraries) кітапханаларды құруға арналған. DLL-дер туралы алда тағыда қарастырып кетеміз.

Пакеттер – бұл DLL компилацияланған түрінің  бір түрі. DLL-ден айыырмашылығы пакеттер бағдарламаға типтер мен деректерді сақтап және бере алады. Олар компоненттерді сақтау үшін арнайы өнделген. Мысалы, VCL60 .bpl пакеті Delphi дің негізгі компоненттерінен тұрады.

Құйындар модулі құйындар командасы деп аталатындарды іске асыруға арналған . құйындар механизмдері 32-разрядты Windows та қолданылады және Delphi 1- ді қолдамайды.

 

 

1.3 Динамикалық кітапханалар

 

 

Динамикалық кітапханалар (DLL, Dynamic Link Library) Windows операциялық жүйелерін және қосымша бағдарламаларды функционарлау кезінде маңызды рөл атқарады. Олар өзімен бірге компилияциядан өткен орындалған кодтары бар файлдарды көрсетеді. Ол файлдар қосымшалармен және басқа да DLL-дермен қолданылатын файлдар. Операциялық жүйенің көптеген функцияларын іске асыру динамикалық кітапханаларға енгізілген. Олар нағыз қажет болған кезде қолданылады және де олар адресстік кеңістікті экономдауды қамтамассыз етеді. DLL-ге қандай да бір процесс жолыққан кезде ол жадыға жүктеледі. 

Динамикалық кітапханалардың орындалған файлдардан айырмашылығы олардың өздігінен жүктеле алмауы. Динамикалық кітапхана өз жұмысын бастау үшін оны орындалып жатқан бағдарлама немесе жұмыс жасап жатқан DLL шақыруы керек.

Әдетте динамикалық кітапханаларда функциялар тобы енгізіледі. Ол функциялар тапсырмаларды шешу үшін қолданылады. Сонымен қоса, оларда жолдардан бастап формаларға дейінгі әртүрлі ресурстарды сақтауға және қолдануға болады.

Динамикалық кітапхана бірнеше қосымшалармен қолданыла алады, сонымен қоса олардың бәрі бір ғана бағдарламалау тілінің көмегімен жазылуын талап етпейді.

Динамикалық кітапхананың әртүрлілігі болып Delphi пакеті саналады. Ол пакет қосымшаларды және өндеу ортасы үшін компоненттер кодын сақтауға арналған.

Динамикалық кітапханаларды қолдану келесі мүмкіншіліктерге алып келеді:

  1. Қосымшаның және олардың ресурстарымен орындалатын файлдардың өлшемін азайтады;
  2. DLL функциялары бірнеше процесстерді бір уақытта қолдана алады;
  3. Динамикалық кітапханаларды басқару операциялық жүйеге жүктеледі;
  4. DLL - ге өзгеріс енгізу барлық проектіні компиляциядан өткізуді талап етпейді;
  5. Бір DLL ді әртүрлі тілде жазылған бағдарламалар қолдана алады.

Delphi ортасында динамикалық  кітапханаларды өндеу кезінде өзіне қосымша проектісін және динамикалық кітапханалар проектісін қосатын проекттілер тобын пайдаланған ыңғайлы.

DLL (ағылшынша Dynamic-link library –  динамикалық компоновкалардың кітапханасы) – Microsoft Windows және IBM OS/2 операциялық  жүйелердің түсінігі; қосымшаларға  әртүрлі бағдарламаларды қолдануды орындайды. DLL - ге ActiveX және драйверлерді басқару элементтері де жатады. UNIX әлемінде аналогты функцияларды shared objects («айыратын объектілер») орындайды.

DLL файлдарының форматтары  орындалатын файлдардың форматында  орындалады. Оларға код, кестелер  және ресурстарды да жатқызуға  болады.

DLL - ге кіріспе жүргізу мақсаттары

Алдынғы кездерде DLL-ге кіріспе жүргізу жадыны және дисктік жүйелерді эффективті түрде ұйымдастыруды жүзеге асырады. Ол барлық қосымшалар үшін кітапханалық модульдің  тек қана бір данасын қолданады. Бұл жадының қатқыл шектеулерімен Microsoft Windows - тың бұрынғы нұсқаларына маңызды болып келеді.

Бертін келе, модульділік арқасында өндеу эффективтілігін және жүйелік құралдарды қолдануды жақсартуды қолға ала бастады. DLL-бағдарламаларды бір нұсқасынан басқа нұсқасына ауыстыру жүйені тәуелсіз жалғауды, яғни қосымшаға тиіспей, іске асыруы керек болды. Сонымен қоса, DLL кітапханалары  әртүрлі типтегі қосымшаларды қолдана алды. Мысалы, Microsoft Office, Microsoft Visual Studio және т.с.с.

Ары қарай модульділік ойы COM концепциясына өсті.

DLL-ді енгізудің толық артықшылықтарын алу DLL Hell («ад DLL») атты туындының себебінен мүмкін болмады. DLL Hell көптеген қосымшалар бір уақытта бір біріне байланыссыз DLL - кітапханаларының нұсқаларын талап еткен жағдайда туындайды. Жүйе нақты бір өлшемге өскен кезде, DLL саны мыңдап көбее бастайды, олардың бәрі толық сенімділікпен сәйкестікке ие болмады және DLL Hell типтес араздастықтар жиі шығатын болды. Бұл араздастықтар жүйенің жалпы сенімділігін тез азайтатын болды. Microsoft Windows соңғы нұсқалары DLL - дің әртүрлі нұсқаларын параллельді қолдануға мүмкіндік беретін болды. Бұл жағдай модульділіктің бастапқы принциптерінің мүмкіншіліктерін болдырмауға әкеп соқтырды.

 

 

1.4 DLL-дан экспорттау

 

 

Динамикалық кітапханалардан процедуралар мен функцияларды экспорттауын құру үшін exports кілттік сөзі қолданылады. Сонымен бірге DLL файлының негізгі формасындағы функцияларды қосылған модуль функциялары секілді көрсетуге болады.

Мысал ретінде DataCheck динамикалық кітапханасының есептік кілттін қарастырайық:

 

library DataChek

uses

Windows, SysUtils, Classes, Messages, Forms,

Dialogs, StdCtrls, ComCtrls;

function ValidDate(AText: String): Integer; 

begin

try

Result := 0; StrToDate(AText); 

except

on E:EConvertError do Result := -1; 

end; 

end;

function ValidTime(AText: String): Integer;

begin 

try

Result := 0; StrToTime(AText);

except

on E:EConvertError do Result := -1; 

end; 

end;

function Validlnt(AText: String): Integer;

begin 

try

Result := 0; StrToInt(AText);

except

on E:EConvertError do Result := -1;

end;

end;

exports Validlnt,

ValidDate index 1, ValidTime index 2 name 'IsValidTime';

begin

if Length(DateToStr(Date)) < 10

then ShowMessage('Год представлен  двумя цифрами');

end.

 

Демек, бұл кітапхананың үш функциясы жолды ол нақты санға, уақытқа немесе күнге ауыспай тұрып оны тексеруді қамтамассыз етеді. Бұл функциялардың экспорттың қамтамассыз ету үшін оларды exports секциясында хабарлау керек.

Кітапхананың адрес, аты және реттік номерін компиляциялаған кезде экспортталатын функция DLL файлдағы арнайы экспорт кестесіне енгізіледі.

Шақыру туралы келісім. Динамикалық кітапханаларда процедуралар мен функцияларды хабарлау үшін әртүрлі шақыру туралы келісім қолданылады. Тек қана әртүрлі бағдарламалау тілдері процедураға параметрлерді енгізуді әртүрлі жағдайда іске асырады. Стектегі параметрлерді тексеру реті осы шақыру туралы келісіммен жүзеге асады.

C++ және Object Pascal тілдеріндегі стандартты шақыру ерекшелінеді, бірақ та типтерді өзгерту дерективаларының жиынтығы іске асыруды қамтамассыз етеді.

Процедура шақыратын барлық шақыру туралы келісімдерге стектегі параметрлер кедергі жасайды. Келісімнің типіне байланысты стекті тазалау шақырылатын және шақырылған процедура көмегімен жүзеге асады.

Егер стекті тазалау шақырылатын процедура көмегімен орындалса, онда ол одан қайтарылатын мәндерді алып үлгереді.

Егер стекті тазалау шақырылған процедура көмегімен жүзеге асса, онда ол одан бұрын қайтарылатын мәнге жадының уақытша облысында кедергі жасайды.

 

 

1.5 DLL - дегі ресурстар

 

 

Динамикалық кітапханалар тек қана шығарылатын кодтардан тұрмайды, олар сонымен қатар ресурстардан тұрады. Көп жағдайда процедура мен функцияның жұмысын қамтамассыз ететін DLL формалармен қоса тарату қажет болып тұрады. Динамикалық кітапхана проектілерінде формалармен жұмыс жасау тәсілдері қарапайым қосымша проектілеріндегі тәсілдерден еш айырмашылығы жоқ.

Тек қана жалғыз ерекшелігі DLL - дегі кез-келген форма автоматты түрде емес қолмен құрылған деп қаралуы тиіс. Сонымен бірге форма құратын процедурада болашақ форманың иесіне көрсеткіш жіберілуі керек. Мысалы, бізбен қарастырылып жатқан DataCheck кітапханасының showDemoForm процедурасы келесідей көрсетіледі:

procedure ShowDemoForm(AOwner: TComponent); 

begin

DemoForm := TDemoForm.Create(AOwner);

DemoForm.ShowModal;

DemoForm.Free; 

end;

Форманы өшіруді тек қана процедурада ұйымдастыруға болмайды. Сонымен қоса, басқа процедурада немесе динамикалық кітапхананы жүктегенде де болмайды.

Информация о работе Динамикалық кітапханалар