Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Структура 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.

Удалим комментарии и добавим в заготовку после директивы компилятора {$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.

Сохраним проект под именем MyDLL.dll в отдельной папке.

Выполнить пункт меню Project \ Build Project. Выполнить компиляцию, исправить ошибки. При успешной компиляции в нашей папке появится файл MyDLL.dll.

5.15.2. Вызов Dll.

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

Различают два способа вызова подпрограмм из библиотеки: - статический и динамический. Заметим, что в данном случае эти термины используются в несколько ином смысле, чем ранее. В обоих способах вызова библиотека загружается в оперативную память во время выполнения приложения, то есть динамически.

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

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

Рассмотрим статическое импортирование.

При статическом импортировании в секции implementation модуля формы задается заголовок импортируемой подпрограммы с директивой External. При вызове подпрограммы DLL библиотеки возможны два варианта:

а) вызов подпрограммы из библиотеки по имени, в этом случае после слова External записывается только имя библиотеки, например





Дата публикования: 2014-12-10; Прочитано: 1504 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.007 с)...