Реферат Курсовая Конспект
Динамически загружаемые библиотеки (DLL) - раздел Информатика, Лекция 28 ...
|
Лекция 28
Структура DLL- библиотеки.
Library имя; - заголовок библиотеки;
Uses раздел модулей;
Label. . . . . . . . . ; Раздел меток;
Const . . . . . . . . . ; Раздел констант;
Type. . . . . . . . . . ; Раздел типов;
Var . . . . . . . . . . . ; Раздел переменных;
.......
....... Раздел подпрограмм;
Exports раздел экспортирования подпрограмм;
Begin
. . . . . . . . секция инициализации;
End.
Правила записи разделов DLL- библиотеки такие же, как и в случае программы на ТР.
После раздела модулей могут располагаться разделы описания типов, констант, переменных. Например, если в списке формальных параметров подпрограммы есть массив, то необходимо в библиотеке предусмотреть раздел Type и объявить в нем идентификатор типа массива.
Раздел экспортирования предназначен для указания подпрограмм, которые можно передавать в другие программы. Из DLL- библиотеки можно экспортировать только подпрограммы, имена которых указаны в разделе Exports. Подпрограммы, имена которых не указаны в разделе Exports, можно использовать только внутри DLL-библиотеки.
Секция инициализации аналогична такой же секции модуля и выполняется один раз при загрузке библиотеки. Эта секция начинается с зарезервированного слова Begin и заканчивается словом End., в ней можно записывать операторы, выполняющие инициализацию параметров, открытие файлов и т.п.
РазделExports записывается в виде
Exports объявление 1, объявление 2, . . . . объявление n ;
где объявление Х - задает характеристики конкретной экспортируемой подпрограммы. Есть несколько способов задания объявления.
1 способ. Объявление задается именем подпрограммы, например,
Exports Sum;
2 способ. Объявление задается именем и номером (с помощью директивы Index).
Пример. Exports Sum Index 1, Mult Index 2;
Этот способ является самым быстрым по вызову.
5.15.1. Создание DLL- библиотеки.
В Delphy имеются специальные средства для создания DLL библиотек.
Пример. Создадим DLL библиотеку содержащую две процедуры:
MX - определение максимального числа из V1 иV2;
PFY2 - вычисление значения функции У=А*Х*Х.
1. Выполнить команды File New - появится окно NewItem.
Выделим пиктограмму DLL и щелкнем по кнопке ОК.
Откроется окно с заготовкой DLL.
library Project1;
{ Комментарии }
uses SysUtils, Classes;
{$R *.RES}
begin
end.
2. Удалим комментарии и добавим в заготовку после директивы компилятора {$R *.RES} процедуры max и Pfy, а также укажем в разделе экспортирования объявление подпрограмм спомощью имени и номера. В результате получится текст:
Library Project1;
uses Sysutils,classes;
{$R *.RES}
Procedure max(v1,v2:Extended;
Var Z:Extended);
begin
If v1 > v2 Then Z:=v1
Else Z:=v2;
end;
Procedure Pfy(a,x:Extended;
Var Fy:Extended);
begin
Fy:=a*Sqr(x);
end;
Exports Max index 1,
Pfy index 2;
begin
End.
3. Сохраним проект под именем MyDLL.dll в отдельной папке.
4. Выполнить пункт меню Project Build Project. Выполнить компиляцию, исправить ошибки. При успешной компиляции в нашей папке появится файл MyDLL.dll.
5.15.2. Вызов Dll.
Под вызовом библиотеки понимается использование имеющихся в ней подрпограмм (процедур и функций) и ресурсов. При вызове библиотеки программист не имеет возможности указать ее размещение, поэтому библиотека должна быть расположена в папке, в которой Windows может обнаружить ее автоматически. Такими папками являются: корневая папка Windows, ее папки System и System, а также папка из которой запущено приложение.
Различают два способа вызова подпрограмм из библиотеки: - статический и динамический. Заметим, что в данном случае эти термины используются в несколько ином смысле, чем ранее. В обоих способах вызова библиотека загружается в оперативную память во время выполнения приложения, то есть динамически.
При статическом вызове библиотека загружается в оперативную память вместе с использующими ее приложениями и другими библиотеками и выгружается после прекращения работы последнего использующего ее процесса. Достоинством статического вызова является простота реализации в программе. Однако при таком вызове программист не может управлять процессом загрузки библиотеки и, кроме того, библиотека находится в оперативной памяти все время работы приложения, даже если она не будет использована.
При динамическом вызове библиотечных функций программист может управлять процессом загрузки библиотек, а также экономить оперативную память, загружая только нужные в данный момент библиотеки. Например, если библиотека содержит форму для настройки приложения (и используется редко), то имеет смысл загружать ее только на время использования содержащихся в ней кода и ресурсов.
Рассмотрим статическое импортирование.
При статическом импортировании в секции implementation модуля формы задается заголовок импортируемой подпрограммы с директивой External. При вызове подпрограммы DLL библиотеки возможны два варианта:
а) вызов подпрограммы из библиотеки по имени, в этом случае после слова External записывается только имя библиотеки, например
Диалоговые окна
Все программные сообщения можно разделить на: информационные сообщения (например,"Загрузка данных с дискеты завершена") , предупреждающие сообщения (например,"Файл модифицирован. Сохранить?"), сообщения об ошибке ("Файл данных программы не найден. Требуется переустановка программы"). Эта разбивка на типы сообщений является, естественно, не полной. В Delphi имеются специальные средства для формирования и вывода на экран монитора различных сообщений.
– Конец работы –
Используемые теги: Динамически, загружаемые, Библиотеки, DLL0.072
Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Динамически загружаемые библиотеки (DLL)
Если этот материал оказался полезным для Вас, Вы можете сохранить его на свою страничку в социальных сетях:
Твитнуть |
Новости и инфо для студентов