Для создания перечня экспортируемых из динамической библиотеки процедур и функций используется ключевое слово exports. При этом можно указывать как функции, описанные в главном файле DLL, так и функции из присоединенных модулей.
В качестве примера рассмотрим исходный код динамической библиотеки
DataCheck, простейшие функции которой проверяют введенную строку перед конвертацией на соответствие одному из типов данных.
Листинг 28.2. Исходный
код динамической библиотеки DataCheck
library DataChek
uses
Windows, SysUtils, Classes, Messages, Forms,
Dialogs, StdCtrls, ComCtrls;
function ValidDate(AText: String): Integer;
begin
try
Result := 0; StrToDate(AText);
except
on E:EConvertError do Result := -1;
end;
end;
function ValidTime(AText: String): Integer;
begin
try
Result := 0; StrToTime(AText);
except
on E:EConvertError do Result := -1;
end;
end;
function Validlnt(AText: String): Integer;
begin
try
Result := 0; StrToInt(AText);
except
on E:EConvertError do Result := -1;
end;
end;
exports Validlnt,
ValidDate index 1, ValidTime index 2 name 'IsValidTime';
begin
if Length(DateToStr(Date)) < 10
then ShowMessage('Год представлен двумя цифрами');
end.
Итак, три функции этой библиотеки обеспечивают проверку строки перед преобразованием ее в целое число, дату или время. Для обеспечения экспорта этих функций их необходимо объявить в секции
exports.
При компиляции библиотеки адрес, имя и порядковый номер экспортируемой функции добавляется к специальной таблице экспорта в файле
DLL.
Примечание
Компилятор Delphi без проблем добавит таблицу
экспорта и к исполняемому файлу приложения. Правда, при этом получить доступ
к такой функции невозможно — это системное ограничение Windows.
Попробуйте объявить пару функций после ключевого
слова exports в обычном приложении —
проект компилируется без ошибок. Но сами функции недоступны другим процессам.
Имена процедур и функций в секции экспорта разделяются запятыми. Внимательный взгляд на пример экспорта в листинге 28.2 обнаруживает три различных варианта объявления.
В первом варианте компилятор самостоятельно определяет положение функции в таблице экспорта.
При использовании ключевого слова index следующее за ним число задает положение функции в таблице экспорта относительно других таких же функций.
Ключевое слово name позволяет экспортировать функцию под другим именем.
Знаете ли Вы, как разрешается парадокс Ольберса? (Фотометрический парадокс, парадокс Ольберса - это один из парадоксов космологии, заключающийся в том, что во Вселенной, равномерно заполненной звёздами, яркость неба (в том числе ночного) должна быть примерно равна яркости солнечного диска. Это должно иметь место потому, что по любому направлению неба луч зрения рано или поздно упрется в поверхность звезды. Иными словами парадос Ольберса заключается в том, что если Вселенная бесконечна, то черного неба мы не увидим, так как излучение дальних звезд будет суммироваться с излучением ближних, и небо должно иметь среднюю температуру фотосфер звезд. При поглощении света межзвездным веществом, оно будет разогреваться до температуры звездных фотосфер и излучать также ярко, как звезды. Однако в дело вступает явление "усталости света", открытое Эдвином Хабблом, который показал, что чем дальше от нас расположена галактика, тем больше становится красным свет ее излучения, то есть фотоны как бы "устают", отдают свою энергию межзвездной среде. На очень больших расстояниях галактики видны только в радиодиапазоне, так как их свет вовсе потерял энергию идя через бескрайние просторы Вселенной. Подробнее читайте в FAQ по эфирной физике.