TComplex = record Re, Im: Single

end;

Procedure Add(x, y: TComplex; var z: TComplex); Far;

External 'Complex' ;

Procedure Sub(x, y: TComplex; var z: TComplex); Far;

External 'Complex' index 3;

Procedure Mul(x, y: TComplex; var z: TComplex); Fae;

External 'Complex' Index 4;

Procedure CDiv(x, y: TComplex; var z: TComplex); Far;

External 'Complex' name 'CmplxDiv';

var

a,b,c: TComplex;

begin

{Исходные комплексные числа: 1+li, 1+21}

a. Re := 1;

а. Im : = 1 ;

b.Re := 1;

b.Im := 2;

Add(a,b,с);

WriteLn('Сложение : ', с.Re:3:0, c.Im:4:0,'i');

Sub (a,b,с) ;

WriteLn('Вычитание: ', c.Re:3:0, c.Im:4:0,'i');

Mul (a,b,c) ;

WriteLn('Умножение: ', c.Re:3:0, c.Im:4:0,'i');

CmplxDiv(a,b,с);

WriteLn('Деление : ', c.Re:3:l, c.Im:4:1,'i');

end.

Описанный выше способ связывания DLL с основной программой называется статическим, т.к. он реализуется компилятором и компоновщиком. В результате Windows — заголовок программы для защищенного режима будет содержать список всех DLL и загрузчик расширителя ДОС загрузит библиотеки в память одновременно с загрузкой самой программы.

Программа может загружать DLL и самостоятельно (динамически) с помощью трех функций, входящих в модуль WinAPI: LoadLibrary, CetProcAddress и FreeLibrary. Следующий пример иллюстрирует технику динамической загрузки DLL Complex:

{$N+,E+} Uses WinAPI;

type

TComplex = record Re, Im: Single

end;

TComplexProc = Procedure (x, y: TComplex; var z: TComplex);

var

a, b, c: TComplex;