Внешние подпрограммы

Имеется возможность использования при компиляции и компоновке программ вместо подпрограмм виде объектных кодов (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 (по умолчанию)).


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: