Описания импортируемых процедур и функций могут помещаться
непосредственно в программу, которая их импортирует. Однако обыч-
но они объединяются в модуль импорта, содержащий описания всех
процедур и функций в DLL, а также все типы и константы, необходи-
мые для интерфейса с DLL. Примерами таких модулей импорта являют-
ся поставляемые с Borland Pascal модули WinTypes, WinProcs и
WinAPI. Модули импорта не обязательны для интерфейса с DLL, но
они значительно упрощают обслуживание использующих множество DLL
проектов.
В качестве примера рассмотрим DLL с именем DATETIME.DLL, со-
держащую четыре подпрограммы для получения и установки даты и
времени с помощью типа записи, содержащей число, месяц, год и за-
писи, которая содержит секунду, минуту и час. Вместо спецификации
соответствующих описаний процедуры, функции и типа в каждой ис-
пользующей DLL программе вы можете построить наряду с DLL модуль
импорта. В следующем примере создается файл .TPW (в предположе-
нии, что целевой платформой является Windows), но отсутствуют код
и данные для использующей его программы.
unit DateTime;
interface
type
TTimeRec = record
Second: Integer;
Minute: Integer;
Hour: Integer;
end;
type
TDateRec
TDateRec = record
Day: Integer;
Month: Integer;
Year: Integer;
end;
procedure SetTime(var Time: TTimeRec);
procedure GetTime(var Time: TTimeRec);
procedure SetDate(var Date: TDateRec);
procedure GetDate(var Date: TDateRec);
inplementation
procedure SetTime; external 'DATETIME' index 1;
procedure GetTime; external 'DATETIME' index 2;
procedure SetDate; external 'DATETIME' index 3;
procedure GetTime; external 'DATETIME' index 4;
end.
Любая программа, использующая DATETIME.DLL может теперь
просто задать в своем операторе uses модуль DateTime. Приведем
пример программы Windows:
program ShowTime;
uses WinCrt, DateTime;
var
Time: TTimeRec;
begin
GetTime(Time);
with Time do
WriteLn('Текущее время: ', Hour, ':', Minute, ':',
Second);
end.
Другим преимуществом использования модуля импорта, такого
как DateTime, является то, что при модификации DATETIME.DLL обно-
вить требуется только модуль импорта DateTime.
Когда вы компилируете использующую DLL программу, компилятор
не ищет DLL, так что ее присутствие не требуется. Однако DLL
должна присутствовать в системе при выполнении программы.
Если вы пишете собственные DLL, они не компилируются автома-
тически при компиляции использующей ее программы с помощью коман-
ды Compile│Make. DLL следует компилировать отдельно.