Программирование для защищенного режима 235
Procedure CmplxDiv(x, у: TComplex; var z: TComplex); Export;
var
zz: Single;
begin
zz := sqr(y.Re) + sqr(y.Im);
z.Re := (x.Re * y.Re + x.Im * y.Im)/zz;
z.Im := (x.Re * y.Im - x.Im * y.Re)/zz end;
Exports
CmplxAdd index 1 name 'ADD' resident,
CmplxSub index 2,
CmplxMul index 3,
CmplxDiv index 4;
begin end.
9.5.2. Использование DLL
Для использование подпрограмм из DLL необходимо описать их как внешние, добавив за словом External имя библиотеки в апострофах:
Procedure MyProc; Far; External 'MyDLL';
Обратите внимание: перед External нало обязательно указать Far. в противном случае компилятор потребует поставить точку с запятой после слова External. Как уже говорилось, подпрограмма вызывается по имени или по индексу. В нашем примере из библиотеки MyDLL вызывается подпрограмма с внешним именем 'MYPROC'. Если нужно сослаться на индекс подпрограммы, за именем библиотеки указывается слово index и индекс:
Procedure MyProc; Far; External 'MyDLL' index 2;
В этом случае имя, под которым подпрограмма будет известна программе, может не совпадать с ее внешним DLL— именем. Впрочем, программист может и явно переопределить имя подпрограммы, даже если он ссылается на ее внешнее имя:
Procedure MyProc; Far; External 'MyDLL' Name 'ExtName';
В это варианте предполагается, что экспортируется процедура с внешним именем ' EXTNAME'.
После любого из указанных выше обяъвялений экспортируемая подпрограмма становится доступна программе и может использоваться в ней как обычная подпрограмма на Паскале независимо от того, какой язык программирования использовали ее создатели.
В следующей программе используется библиотека Complex, описанная на предыдущей странице. {$N+,E+} type