русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


Використання DLL бібліотеки


Дата додавання: 2014-10-07; переглядів: 912.


Статичне зв'язування

Створимо тестовий додаток для DLL, розробленої в попередньому розділі. Будемо використовувати при цьому статичне зв'язування.

Нехай є форма виду:

При закритті форми видати запит на вихід за допомогою функції exit.

Для кнопки спочатку видати діалог на введення пароля за допомогою функції parol . Якщо пароль вірний, то підраховується сума двох перші полів і результат записується в третє поле за допомогою функції sum.

На початку відразу після ключового слова Implementation додатка вводять оголошення процедур і функцій, імпортованих з DLL. Кожне оголошення повністю повторює відповідне оголошення в бібліотеці, і завершується специфікатором external, після якого в лапках вказується ім'я DLL файлу. Це все, що потрібно для статичного зв'язування.

implementation

function exit:boolean; stdcall; external 'primer.dll';

function sum(a,b:real):real; stdcall; external 'primer.dll';

function parol:string; stdcall; external 'primer.dll';

Подальше використання імпортованих функцій не відрізняється від використання будь-яких інших функцій.

Для виходу з форми в події форми Onclosequery напишемо код:

procedure Tform1.Formclosequery(Sender: Tobject; var Canclose: Boolean);

begin

canclose:=exit;

end;

Для кнопки Button1 напишемо код:

procedure Tform1.Button1Click(Sender: Tobject);

begin

//якщо пароль рівний 1111

if parol='1111' then

edit3.Text:=floattostr(sum(strtofloat(edit1.Text),strtofloat(edit2.Text)));

end;

У наведених прикладах малося на увазі, що файл DLL розташований у тій же туці, з якої запускається додаток, або в одному із системних каталогів Windows, або в каталозі, зазначеному в змінній оточення PATH. Якщо це не так, то в специфікації external треба вказати повний шлях до файлу бібліотеки. Але, звичайно, у цьому випадку додаток неможливий буде перенести на комп'ютер з іншим розташуванням каталогів. Так що зазначення повного шляху, як правило, недоцільно. Краще, передаючи додаток і DLL користувачеві, указати, що файл DLL повинен розташовуватися в системному каталозі. А ще краще, якщо програма установки вашого додатка (інсталятор) сама розмістить файли там, де потрібно.

Динамічне зв'язування

Динамічне зв'язування в додатках здійснюється складніше статичного зв'язування.

Динамічне зв'язування можна розбити на три етапи. Насамперед, треба завантажити бібліотеку функцією Loadlibrary API Windows. Потім за допомогою функції Getprocaddress треба отримати покажчики на функції бібліотеки, які вам потрібні. Тільки після цього можна викликати бібліотечні функції.

Подивимося, як це все реалізується на практиці на прикладі primer.dll, створеної в попередніх розділах.

У наведеному коді вводяться чотири глобальні змінні. Змінна Н використовується для зберігання дескриптора завантаженої бібліотеки. Змінні exit, sum і parol використовуються для зберігання адрес процедури й функцій бібліотеки. У якості типів цих змінних використовуються заголовки процедури й функцій бібліотеки.

var

h:thandle=0;

exit:function:boolean; stdcall;

sum:function(a,b:real):real; stdcall;

parol:function:string; stdcall;

Для форми в події Onclosequery напишемо код виду:

procedure Tform1.Formclosequery(Sender: Tobject; var Canclose: Boolean);

begin

//якщо файл dll існує

if fileexists('primer.dll')=true then

begin

//завантажуємо dll у пам’ять

h:=loadlibrary('parol.dll');

//знаходимо в dll потрібну підпрограму

exit:=getprocaddress(h,'exit');

//викликаємо знайдену підпрограму

canclose:=exit;

end;

end;

Для кнопки Button1 напишемо код:

procedure Tform1.Button1Click(Sender: Tobject);

begin

//якщо файл dll існує

if fileexists('primer.dll')=true then

begin

//завантажуємо dll у пам’ять

h:=loadlibrary('parol.dll');

//знаходимо в dll потрібні підпрограми

parol:=getprocaddress(h,'parol');

sum:=getprocaddress(h,'sum');

//викликаємо знайдені підпрограми

if parol<>'1111' then

edit3.Text:=floattostr(sum(strtofloat(edit1.Text),strtofloat(edit2.Text)));

end;

end;

 

Питання для самоконтролю

1. Що таке DLL бібліотеки? У чому їх переваги?

2. Дайте їх характеристику статичному зв’язуванню DLL.

3. Дайте їх характеристику динамічному зв’язуванню DLL.

4. Як створити проект DLL? Якові структуру він має?

5. Як описуються підпрограми в DLL?

6. Опишіть процедуру додавання форми в DLL бібліотеку.

7. Опишіть процедуру виклику DLL бібліотеки через статичне зв'язування.

8. Які етапи требі виконати для динамічного зв’язування DLL?

9. Які змінні треба описати для динамічного зв’язування DLL?

10. Опишіть процедуру виклику DLL бібліотеки через динамічне зв'язування.


 

Лекція №11

Тема: Регулярні вирази та їх використання.

Мета: Отримати знання про регулярні вірази, навчитися створювати регулярні вирази для пошуку даних та обробки рядкових даних. Придбати знання про використання регулярних виразів у програмах.

Перелік питань, що розглядаються на лекції:

1. Поняття регулярного выразу, його складові.

2. Використання регулярних виразів у програмах.

 


<== попередня лекція | наступна лекція ==>
Внесення форм в DLL | Поняття регулярного выразу, його складові.


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн