Имеется возможность использования при компиляции и компоновке программ вместо подпрограмм виде объектных кодов (obj – файлов), созданных другими компиляторами. Obj - файлы должны при этом удовлетворять и использовать модели памяти и способы передачи значений. Разработчиками гарантируется совместимость кодов, полученных компиляторами Turbo и макси _________ и файлов, скомпонованных по стандарту.
Поскольку подпрограмма образованна в других языках программирования, имеет интерфейс отличный от языка описания Paskal, должны быть выполнены некоторые действия по совместимости интерфейса. Например при подключении Obj – файлом созданного на ассемблере, сегмент кода и сегмент данных, определяется в ассемблере, должны иметь определенные названия а параметры различной длинны должны передаваться через различные определенные регистры. Для подключении объектных файлов используется директива компилятора:{$L «имя файла».obj}
Подпрограммы реализованные в подключенных файлах которые предполагают использовать в основной программе, должны быть объявлены в основной программе заголовка с директивой:External.
Пример
{$L a.obj}
Procedure p1; external;
Procedure p2 (x:byte); external;
Function F1 (c: char):byte; external;
Procedure p;
Begin
……
End;
…….
Подключают таким образом внешние подпрограммы использующиеся в основной программе аналогично обычным подпрограммам. Обычно директиву {$L «имя файла».obj}
И описание внешней подпрограммы размещают рядом, хотя порядок следования подпрограмм может быть другим.
Asm
«юникод ассемблера»
End;
Пример подключения графического драйвера и графичесих шрифтов в ехе –файле
Пусть необходимо “ прошить “ в ехе –файл стандартный драйвер egavga.bgi и два шрифта: trip.chr и goth.chr.
1. Преобразуем бинарные файлы bgi и chr в obj-файл. Используются утилиты системы MS Dos:
BINOBJ «имя бинарного файла» «имя obj –файла» «имя подпрограммы»
Имя подпрограммы используется при подключается с помощью директивы {$L}
BINOBJ egavga.obj egavga.obj dr
BINOBJ trip.chr trip.obj trip
BINOBJ goth.chr goth.obj goth
После выполнения данных утилит будет получено три объектных файла
2. Пример подпрограммы подключения
Uses graph;
Var
Gd,gm:integer;
{$L egavga.obj}
Procedure dr; external;
{$L trip.obj}
Procedure trip; external;
{$L goth.obj}
Procedure goth; external;
Begin
Gd:=9;
Gm:=1;
Register bgidriver(@dr);
Register bgiFont(@trip);
Register bgiFont(@dgth);
Initgraph (gd,gm, ‘ ’);
…..
Closegraph;
End.
Процедура Register bgidriver используется для загрузки драйвера в память. В качестве параметра используется адрес процедуры, связанной с драйвером процедуры Register bgifont загружается шрифт в память (поддерживает таблицу из m шрифтов, в Паскале – 4 шрифта + default (по умолчанию)).