Модули импорта
Описания импортируемых процедур и функций могут помещаться непосредственно в программу, которая их импортирует. Однако обыч- но они объединяются в модуль импорта, содержащий описания всех процедур и функций в 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 следует компилировать отдельно.