Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Технологии программирования.doc
Скачиваний:
42
Добавлен:
11.04.2015
Размер:
651.26 Кб
Скачать

Контрольные вопросы и задания

1. Что такое "исключительная ситуация"?

2. На каких ключевых словах строится механизм обработки исключений?

3. Как строится программная конструкция на основе этих ключевых слов?

4. В обработчики каких событий вводятся эти конструкции?

5. Какой способ введения в программу конструкции обработки исключительной ситуации является наиболее корректным и удобным? Почему?

 

Лабораторная работа №10 (2 часа)

 

Технология создания динамических библиотек (DLL)

 

Цель: освоить технологию создания и использования библиотек динамической компоновки в Delphi.

Оборудование: ПЭВМ IBM PC-AT.

Программные средства: ОС семейства Windows, среда Delphi 5.* (или выше).

 

Задание

 

1. Спроектировать исходный текст DLL-библиотеки, содержащий 2-3 процедуры для вызова внешними программами.

2. Создать интерфейсный модуль для работы с DLL.

3. Подготовить новый проект, в котором продемонстрировать вызов (и применение) процедур, содержащихся в динамической библиотеке.

 

Программа работы

 

1.     Изучить назначение и приёмы использования библиотек динамической компоновки.

2.     Написать исходный код DLL.

3.     Написать исходный код интерфейсного модуля DLL.

4.     Написать исходный код программы, импортирующей функции DLL.

5.     Выявить и исправить ошибки в модулях.

6.     Расставить по тексту модулей комментарии.

7.     Откомпилировать исходные коды DLL и импортирующей программы.

 

Пояснения к работе

 

Библиотеки динамической компоновки или просто DLL (Dynamic Link Libraries) можно определить как наборы подпрограмм, которые могут вызываться приложениями и другими DLL. Они представляют собой мощный механизм, позволяющий ядру Windows, наряду с гибким управлением памятью, использовать минимальный объём памяти для выполнения программ.

С одной стороны, модуль DLL содержит доступные ресурсы или исполняемый код. Но, с другой стороны, DLL – это отдельно компилируемая и выполняемая программа, которая связана во время выполнения с программами, использующими её.

Чтобы отличать DLL от автономно выполняемых программ, эти файлы именуются с расширением .DLL.

Программы Delphi могут вызывать DLL, написанные на других языках и созданные в других приложениях Windows, в то время как программы, написанные на других языках, могут вызывать DLL, написанные в Delphi.

Лабораторная работа выполняется в три этапа:

  1. Проектирование исходного текста будущей динамической библиотеки.

  2. Подготовка интерфейсного модуля для работы с ней.

  3. Создание демонстрационного проекта с вызовом процедур из DLL.

 

Указания к выполнению работы

Этап 1. Запустите оболочку Delphi.

Командой главного меню File|New откройте диалоговое окно и на его закладке "New" выполните два коротких нажатия на пиктограмме с названием "DLL". При этом в окне редактора кода должен появиться шаблон проекта динамической библиотеки.

Основное отличие этого проекта от стандартного (содержащего форму) состоит в том, что в нём вместо ключевого слова "program" используется слово "library", не содержится объекта TApplication, дополнительного модуля и главной формы.

Для простоты и наглядности разместим в нашей DLL всего две процедуры. Одна из них будет производить на экране отрисовку эллипса и прямоугольника по передаваемым параметрам этих фигур, вторая – будет выводить на экран сообщение с заданным содержанием.

Для этого, прежде всего, укажите в разделе uses используемые модули:

 

WinTypes, WinProcs;

 

в разделе var объявите переменную для работы с экраном:

 

DC : hDC; { hDC - тип указателя на специальную структуру данных,

 называемую контекстом устройства }

 

и далее расположите описание функций:

 

procedure Graphic (X, Y, W : Integer); export;

begin

try

// получить контекст дисплея

DC := CreateDC ('DISPLAY', NIL, NIL, NIL);

// отрисовать эллипс

Ellipse (DC, X, Y, X+W, Y+W);

// отрисовать прямоугольник

Rectangle (DC, X+100, Y+100, X+W, Y+W);

finally // в любом случае

DeleteDC (DC); // освободить контекст дисплея

end;

 

end;

 

procedure MessagePlus (S : PChar); export;

begin

MessageBox (0, S, 'Сообщение',

Mb_OK or MB_ICONINFORMATION);

end;

 

Обратите внимание на оператор "export", который должен присутствовать в программе после заголовка каждой процедуры или функции. Это ключевое слово указывает компилятору на необходимость создания специального пролога и эпилога для таких функций (чтобы впоследствии можно было их использовать, вызывая из других программ, – "экспортировать").

Далее по тексту программы надо создать секцию "exports", в которой требуется перечислить все экспортируемые библиотекой функции и указать их уникальные идентификаторы, обычно начинающиеся с 1 для первой функции, с 2 – для второй и т. п.:

 

exports

Graphic index 1,

MessagePlus index 2;

 

Проверьте проект библиотеки на наличие ошибок, сохраните его в новой директории с именем "DLLPlus.dpr" (дополнительная динамическая библиотека), выполните команду главного меню File|Close All и переходите к следующему этапу.

Этап 2. Подготовку интерфейсного модуля динамической библиотеки начните с команды главного меню File|New и выполнения двойного нажатия на пиктограмме "Unit" с закладки "New" в появившемся диалоговом окне.

Как и на первом этапе, укажите здесь в разделе uses используемые модули:

 

WinTypes, WinProcs;

 

После объявите интерфейсные функции:

 

procedure Graphic (X, Y, W : Integer);

procedure MessagePlus (S : PChar);

 

а в разделе implementation опишите их, указав, что они вызываются из внешней библиотеки "DLLPlus" по соответствующим индексам (при этом в названии библиотеки расширение отсутствует):

 

procedure Graphic; external 'DLLPlus' index 1;

procedure MessagePlus; external 'DLLPlus' index 2;

 

Сохраните этот модуль с именем "DLLLib.pas" в одной директории с файлом DLLPlus.dpr.

Этап 3. Создайте новый проект.

В разделе используемых библиотек uses укажите интерфейсный модуль с названием "DLLLib".

Поместите на форму кнопку любого типа. Её свойству Caption присвойте значение "Вызов функций из DLL".

Внутри обработчика события OnClick для кнопки запрограммируйте вызов функций из динамической библиотеки, например, следующим образом:

 

MessagePlus ('Сейчас на экране будут нарисованы эллипс и прямоугольник

посредством вызова функции из DLL.');

Graphic (200, 200, 50);

 

Сохраните проект в директории, где расположены файлы DLLLib.pas и DLLPlus.dpr. Командой главного меню Project|Build All Projects откомпилируйте его, получив EXE - файл (не запускайте этот файл – он ещё не пригоден для выполнения: не готова динамическая библиотека с расширением .DLL).

Закройте проект командой File|Close All и вернитесь к сохранённому проекту "DLLPlus.dpr".

Откомпилируйте библиотеку командой Project|Build All Projects, получив соответствующий файл с расширением .DLL.

Командой Run|Parameters вызовите диалоговое окно установки параметров использования динамической библиотеки. Здесь на закладке Local в окне редактора Host Application укажите приложение, которое будет использовать данную библиотеку (EXE - файл проекта, в котором Вы производите вызов процедур из DLL). Воспользуйтесь при этом кнопкой Browse.

После (при работе в Delphi 4.0 нажмите кнопку Load — должно появиться окно отладчика) клавишей F9 откомпилируйте DLL ещё раз.

Проверьте, как работает Ваша программа, запустив её с командной строки.

Продемонстрируйте результаты вызова функций динамической библиотеки преподавателю.