Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Структура проекта DLL





Для создания динамической библиотеки в Репозитории Delphi имеется специальный шаблон - DLL Wizard расположенный на странице New Репозитория. В отличие от проекта обычного приложения, проект DLL состоит всего из одного исходного файла. Впоследствии к нему можно добавлять отдельные модули и формы.

Исходный файл проекта динамической библиотеки

 

library Project1;

uses SysUtils, Classes;

{$R *.res}

begin

end.

 

Для определения типа проекта используется ключевое слово library. За словом Library следует правильный идентификатор, но в отличие от объявления модуля он не обязан совпадать с именем файла: имя DLL определяется именем DLL-файла, а не идентификатором, следующим за Library. При компиляции такого проекта динамической библиотеки создается файл с расширением dll.

Сразу за заголовками экспортируемых подпрограмм должна следовать директива Export, которая указывает компилятору на необходимость выработки специального кода пролога/эпилога. В разделе описаний DLL могут объявляться типы (в том числе и классы), константы и переменные, но они остаются скрытыми от вызывающей программы и могут использоваться только внутри DLL. В разделе описаний помимо стандартных для обычной программы объявлений используется специальный раздел объявления экспортируемых подпрограмм. Этот раздел начинается зарезервированным словом Exports, за которым через запятую перечисляются имена экспортируемых подпрограмм.

Блок begin…end называется блоком инициализации библиотеки и предназначен для размещения кода, который автоматически выполняется при загрузке DLL. Между секцией uses и блоком инициализации можно располагать исходный код функций динамической библиотеки и их объявления. При этом можно использовать любые конструкции языка Object Pascal (Delphi), а также применять формы и компоненты. Для каждой подпрограммы помимо имени в заголовке DLL указывается присвоенный ей целочисленный индекс (целое число в диапазоне от 0 до 32767). Это позволяет вызывающей программе ссылаться не на имя, а на индекс подпрограммы и тем самым уменьшить затраты времени на установление с ней связи.

Delphi предоставляет возможность определить внешнее имя экспортируемой подпрограммы отличное от ее настоящего имени. Для этого в списке Exports добавляется слово name и внешнее имя в апострофах:

 

Exports MyFunc index I name 'NEWFUNC';

 

Функции из DLL-библиотеки могут вызываться как из приложений, разработанных в Delphi, так и из приложений, написанных на других языках программирования, таких, как C++.

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

1) register;

2) pascal;

3) cdecl;

4) stdcall;

5) safecall.

Способ передачи параметров указывается через точку с запятой после описания функции. Например: function F1 (X, Y, Z: Real): Heal; stdcall.

Различные способы передачи параметров определяют порядок передачи параметров (слева направо или справа налево), а также указывают, кто будет освобождать память стека (вызываемая или вызывающая процедура). При использовании DLL-библиотек в качестве компонентов, вызываемых из приложений на других языках программирования, следует использовать соответствующий модификатор вызова. Для приложений на C++ применяется модификатор вызова stdcall1.

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

Экспорт функций может выполняться тремя способами:

- по имени функции, используемому в DLL-библиотеке;

- по имени функции. заданному как имя экспорта;

- по присвоенному функции индексу.

Для того чтобы присвоить функции некоторый индекс, его следует указать в секции exports после имени функции с ключевым словом index. Для того чтобы экспортируемая функция вызывалась по имени, отличном от имени, используемого в DLL-библиотеке, в секции exports после имени функции следует указать ключевое слово name и новое имя экспорта для данной функции.

DLL - библиотека не является выполняемым модулем. Для получения ее кода достаточно произвести компиляцию проекта. Это можно сделать, выполнив команду меню Рrоject | Compile <имя_проекта> или нажав клавиши Ctrl+F9.

Date: 2015-06-06; view: 852; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.006 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию