Турбо Паскаль тілінің динамикалы байланысатын кітапханалары


Жоспар
Турбо Паскаль тілінің динамикалы байланысатын кітапханалары
І Кіріспе
ІІ Негізгі бөлім
а) Динамикалы қосылатын кітапханалар.
б) Динамикалы байланысатын кітапханаларды құру.
в) ДИ-ден процедуралар мен функцияларды импорттау.
г) Статикалық және динамикалық жүктеулер
д) Динамикалы байланысатын кітапханаға форманы енгізу
программасы
ІІІ Қорытынды
Қолданылған әдебиеттер
Динамикалы байланысатын кітапханалар
Динамикалы байланысатын кітапханалар - Dinamically Linked Libraries (DLL) - Dos Windows режимдерімен жұмыс жасау кезінде енгізілге программаларға қосымша мүкіндіктер береді. Және де олар компютердың тек BP. EXE, BPC. EXE, BPW. EXE версияларымен ғана құралған болуы мүмкін.
Қазіргі таңда стандарттық динамикасы байланысатын кітапханалардың (DLL) программамен жабдықтауды программистерге келешекте стандартты программалармен қатар қолдануға мүмкіндік беретін өз динамикалы байланысатын кітапханаларын (ДИ) құруға мүмкіндік береді, сондай фирмалардың бірі - Borland Pascal With Object.
Алғашында динамикалы байланысатын кітапханалар Windows-тың бөлімдерінде қолданылған. Borland Object динамикалы байланысатын кітапханаларды Dos режимі үшін де жұмыс жасауға мүмкіндік жасады.
ДИ сияқты кітапханалардың құндылығы- олардың оперативті жадты жүктегеннен кейін де енгізілген программалармен қатар, олар Ди-дің Windows үшін жұмыс істеуімен бірдей болады. Бұл құрылым жұмыс жасаушыларға Dos-та қалай жұмыс істесе Windows-та да дәл солай жұмыс істеуге де программалар құруға мүмкіндік береді.
Сонымен қатар, ДИ «көп тілді» проекттерді қолдайды,
яғни: Borland Pascal With Object тілінде жазылған программаларда басқа тілдерде жазылған ДИ, ал басқа тілдерде жазылған программаларда Borland Pascal With Object тіліндегі ДИ қолданылады.
Динамикалы байланысқан кітапханалардың жазылу синтаксисі келесі түрге ие:
«Динамикалы байланысқан кітапхана» -тілдің құрылымы бір жағынан модуль құрылымының жалғасы мен өнімі болса, екінші жағынан онымен салыстырғанда кейбір шектеулерге ие болып табылады.
ДИ -дің ерекшелігі келесі түрдегі белгілермен анықталады:
- Негізгі программадағы модульдердің компоненттері статистикалық түрде тек компотентция кезінде ғана орындалады, ал ДИ - программаның орындалу барысында динамикалы болып табылады. Бұның өзі бір уақытта жұмыс істейтін бірнеше программалар үшін әрқайсысынан қолданылған функциялар мен процедуралардың тек бір ғана көшірмелерін оперативтік жадта ұстап тұруға мүмкіндік береді.
- Модульді қоспағанда, ДИ-дің кодтары мен ресурстары оған қолданылып отырған программада компанантталады, ДИ-типті арнайы орынлатын файлда болады.
- Программа арқылы шақырылған ДИ-дің функциялары мен процедуралары онымен тек динамикалы түрде ғана байланысады.
- ДИ-дің модульмен салыстырғандағы шектеулігі мынада, модульдер шектеулігі тілдік бірліктерді (типтер, тұрақтылар, айнымалылар және т. б) импорттай алады, ал ДИ тек қана функциялар мен процедураларды ғана. Бірақ, ДИ тек айнымалыларды қамтамасыз ете алад, ал модульдер болса, оларды қолдану үшін импорттай алмайды. ДИ-дің айнымалыларына кез-клген байланыс процедуралық интерфейе арқылы жасалынған болуы тиіс.
- Қолданылуы арқылы құрылып, компиляциялауға жіберілген программаларға қолданылған ДИ модульдер сияқты автоматты түрде компиляцияланбайды. Оны, яғни, ДИ-ді арнайы (жеке) компиляциялау талап етіледі.
Динамикалы қосылатын кітапханалар
Динамикалы қосылатын кітапханалар (Dinamik Link Library) сіздің программаңызға Object Pascal программалау тілінде басқа бір программистің жазған функциялары мен процедураларын интегралдаудың әмбебап механизмін ұсынады. ДИ жұмысқа дайын процедуралар, функциялар немесе ресурстардан құралған жасанды модуль түрінде реакцияланады. Программисттердің болжауынша, ДИ мен жай ғана Object Pascal модульдерінің арасында үлкен ұқсастық болады, себебі бұлардың екеуі де программистерге программаның басында өз кодтарын жазудан бас тартуға мүмкіндік береді. Бірақ, принциптік айырмашылықтары да бар Бұлардың ішіндегі ең негізгісі ДИ-дің программасын орнатуға мүмкіндігі жоқ айнымалылар, тұрақтылар және типтер болып табылады. Себебі, Ди-ді жасаушылар программалау тілдерінің типсіз түрін, ассамблерді қолдана алады. Нәтижеде, ДИ бүгінгі таңда программистер үшін өте қажетті болып табылатын кластарды программаға экспорттай алмайды. Бұл үшін тек пакеттер ғана қолданылады. Тағы бір негізгі айырмашылық болып табылатыны - программаларының байланысу әдістері. Модульдер программамен тек компоненттеу бөлімі арқылы байланысады. Егер бірдей модульді екі программа іске қосылған болса, онда жадта бірдей прагменттегі кодтардың екі данасы болады. Сонымен қатар ДИ программаға орындалу кезінде қосылады. Егер тағы да екі программа бірдей кітапхана ДИ-ді қолданған болса, онда программа арқыл кодтарды айырудың тек бір ғана данасы жадта сақталады. Бұл компьютердің физикалық жады екендігін анықтауға тура келеді. Әрбір программа өзінің орналасуына қарай белгілі бір орын алады да бұлар ДИ кітапханаларының бейнесі ретінде көрінеді. Динамикалық қосылу ДИ-ге модульдер арқылы мағынасы онша қажетті бола қймайтын мәліметтерді береді. Олар: ДИ кітапханасының кез-келген өзгертулері қолданылып отырған программаның міндетті түрде ауыспалы болуын талап етеді.
ДИ-ден процедуралар мен функцияларды импорттау
Borland Pascal With Object тілінде жазылған программалар мен модульдер ДИ-ден процедуралар мен функцияларды үш тәсілмен импорттай алады.
- Атауы бойынша
- Жаңа Атауы бойынша
- Ретті номері бойынша
Процедуралардың немесе функциялардың импорттаудағы фактілері оның программаларына немесе модульдеріне сай келетін жазбаларында көрсетілген Ди-ден импортталған процедуралар мен функциялар мына талаптарды қанағаттандырулары тиіс.
- Міндетті түрде External процедуралық мәліметі қолданылуы керек.
- ДИ-дің атауы External мәліметінен кейін көрсетіледі.
- Процедуралық far мәліметі арқылы немесе компилятордың {$ F +} мәліметі арқылы орнатылған модель қолданылуы керек.
Атауы бойынша импорттау процедуралар немесе функциялар жазылуында index және name мәліметтері бар болған жағдайда ғана өз атауларымен импортталады.
Мысалы:
Бұл жазылымда MyProc процедурасы MYLIB динамикалы байланысқан кітапханадан өз атауы бойынша, яғни MyProc деп импортталады.
Жаңа атауы бойынша импорттау.
Егер процедура немесе функция бөлімінде name мәліметі көрсетілген болса, онда ол өз атауы бойынша емес name-ге көрсетілген атау бойынша импортталады.
Мысалы:
Бұл жазылымда MyProc процедурасы MYLIB динамикалы байланысқан кітапханадан өз атауы бойынша Яғни, MyProc бойынша емес, жаңа бір атау NEWNAME бойынша импортталады. Бұл жаңа атау үшін кез-келген тұрақты шаманы алуға болады.
Реттік номері бойынша импорттау
Егер процедура немесе функция бөлімінде index мәліметі көрсетілген болса, онда ол өз атауы бойынша емес Іndex мәліметіне көрсетілгенмен импортталады. Мұндай импорттау модульдік жүктелу уақытын азайтады.
Мысалы:
Бұл жазылымда MyProc процедурасы MYLIB динамикалы байланысқан кітапханадан 7 индексі бойынша импортталады.
Статикалық жүктеу
type
TComplex = record
Re, Im : Real:
end:
function ADDC (x, y: TComplex) : TComplex: stdcall: External “Cmp lx. dll” :
function Subc (x, y: TComplex) : TComplex: stdcall: External “Cmp lx. dll” :
function Mulc (x, y: TComplex) : TComplex: stdcall: External “Cmp lx. dll” :
function Divc (x, y: TComplex) : TComplex: stdcall: External “Cmp lx. dll” :
Procedure TfmExample. bbRunClick (Sender: TObject) :
vai
x, y, z: TComplex
…// ары қарай bbRunClick мәтінін қараша
// Source (Chap - 02) Custom Variant/ Unit 1. Pas файлында
end:
end:
Cmplx ADD функциясы келесі түрдегі ADDC атауына ие екендігіне көңіл аударыңыз. Жоғарыда көрсетілген мысалда дәл осылай жазылған. Егер біз төмендегідей етіп жазсақ, ол идентификаттанбас еді.
Function AddC (x, y: TComplex) : TComplex: stdall: External’ Cmplx. Dll:
Динамикалық жүктеу
ДИ-дің функциялары мен процедураларының жоғарыда жазылған әдісі бойынша, компилятор барлық ДИ кітапханаларының тізімін программаның бөіліміне орналастырады. Программа External мәліметінсіз -ақ ДИ-ді жүктей алады. Бұл әдіс стандартты үш функция арқылы жүзеге асады. Олар Loadlibrary, GetProcAddress және FreeLibrary.
type
TComplex = record
Re, Im : Real:
end;
TcomPlexFunc = finction (x, y: TComplex) : TComplex: stdcall:
Procedure TfmExample. bbRunClick (Sender: TObject) :
vai
x, y, z: TComplex
ADDC. Subc . Mulc. Divc: TcomPlexFunc
Handle: LongWord:
Procedure Output (Operation: Char) :
… // OutPut процедурасының денесі өзгеріссіз қалады.
end: // OutPut
begin // bbrunClick
// CMPLX. ДИ кітапханасын жүктейміз
Handle: = LoadLibrary (‘Cmplx. Dll’) ;
If Handle = O then
Begin
ShowMessage (‘CMPLX. DLL кітапханасы табылмады’) :
Halt
end.
Функцияның адресін анықтаймыз. Алғашқы үшеуін индексі бойынша, төртіншісін атауы бойынша.
Addc : = GetProcAddress (Handle. PCRar (LongInt (1) ) ) .
Subc : = GetProcAddress (Handle. PCRar (LongInt (2) ) ) .
MUEC : = GetProcAddress (Handle. PCRar (LongInt (3) ) ) .
Divc : = GetProcAddress (Handle. ‘Divc’) :
x. re : = Random;
x. im : = Random;
y. re : = Random;
y. im : = Random;
OutPut (‘+’) ;
OutPut (‘-’) ;
OutPut (‘*’) ;
OutPut (‘/’) ;
Mm OutPut. Lines. Add (‘ ’) ;
// кітапхананы босатамыз
FreeLibrary (Handle)
end;
Динамикалы байланысатын кітапханаларға форманы енгізу программасы.
ДИ-дің формасының жоқтығына қарамастан, онымен байланысқан модуль арқылы форманы шақыруға болады. Осыған орай, кітапханада форманың модулімен байланысқан uses сілтемесі пайдаланылады.
1) Librari DUWIThForm;
uses
Sysutils;
Classes;
DUFormu in ‘DUFormu. Pas’ {DUForm};
{$R *. Res}
exports
ShowModalForm. ShowForm, FreeForm;
begin
end.
2) Unit DLLFormU;
interface
uses
Windows. Messages. SysUtils. Classes. Graphics. Controls. Forms. Dialogs. Stdctols. Buttons:
type
TDLLForm = Class (TForm)
BitBtn 1: TBitBtn:
BitBtn 2: TBitBtn:
Procedure FormClose (Sender: Tobject; var Action: TCloseAction) ;
Private
{Private declarations}
Callform : THandle : // шақырылатын форманың дискрипторы Public
{Public declarations }
end;
// программада экспортталатындардың хабарламасы
function ShowModalForm : integer;
Procedure ShowForm (aHandle : THandle) ;
Procedure FreeForm :
var
DUForm : TDLLForm :
implementation
{$ R * DFM}
function ShowModalForm : integer;
// модальды шақыру.
begin
DLLForm : = TDLLForm. Create (Application) ;
Result = DUForm. ShowModal;
DUForm. Free :
end;
Procedure ShowForm (Appl. Form : THandle) ;
// модальды емес шақыру
begin
Application. Handle : =Appl: // Application объектісінің орнын басушы.
DUForm : = TDLLForm. Create (Application) ;
CalleForm : = Form;
DUForm Show
end;
Procedure FreeForm :
// форманың жойылуы
begin
DUForm. Free
end;
Procedure TDLLForm. FormClose (Sender : TObject :
Var Action : TCloseAction) ;
begin
if CallForm < > o then
SendMessade (CallForm. Wm uses. o. o)
end;
end.
Динамикалы байланысатын кітапханаларды құру
Жоғарыдағы синтаксистен көрініп тұрғандай, динамикалы байланысатын кітапханалардың құрылымдары дәл программалардың құрылымымен бірдей. Айырмашылығы ДИ-дің бөлімінде кілттік сөз Program --ның орнына library кілттік сөзі жазылады. Бұл сөз компиляторға EXE емес ДИ-типті динамикалы байланысатын кітапханалардың орындалатын файлын құру талап етілгендігін көрсетеді:
library Vector;
uses globala, crt;
Procedure PrintVect (Vect : T Vector; N : Byte) ;
... жалғасы- Іс жүргізу
- Автоматтандыру, Техника
- Алғашқы әскери дайындық
- Астрономия
- Ауыл шаруашылығы
- Банк ісі
- Бизнесті бағалау
- Биология
- Бухгалтерлік іс
- Валеология
- Ветеринария
- География
- Геология, Геофизика, Геодезия
- Дін
- Ет, сүт, шарап өнімдері
- Жалпы тарих
- Жер кадастрі, Жылжымайтын мүлік
- Журналистика
- Информатика
- Кеден ісі
- Маркетинг
- Математика, Геометрия
- Медицина
- Мемлекеттік басқару
- Менеджмент
- Мұнай, Газ
- Мұрағат ісі
- Мәдениеттану
- ОБЖ (Основы безопасности жизнедеятельности)
- Педагогика
- Полиграфия
- Психология
- Салық
- Саясаттану
- Сақтандыру
- Сертификаттау, стандарттау
- Социология, Демография
- Спорт
- Статистика
- Тілтану, Филология
- Тарихи тұлғалар
- Тау-кен ісі
- Транспорт
- Туризм
- Физика
- Философия
- Халықаралық қатынастар
- Химия
- Экология, Қоршаған ортаны қорғау
- Экономика
- Экономикалық география
- Электротехника
- Қазақстан тарихы
- Қаржы
- Құрылыс
- Құқық, Криминалистика
- Әдебиет
- Өнер, музыка
- Өнеркәсіп, Өндіріс
Қазақ тілінде жазылған рефераттар, курстық жұмыстар, дипломдық жұмыстар бойынша біздің қор #1 болып табылады.

Ақпарат
Қосымша
Email: info@stud.kz