BUY WinRAR

Скачай WinRAR сейчас!

120x90-sm08.gif (5422 bytes)

Партнерская программа для русскоязычных сайтов

Обмен программами по FTP

7. Заключение

7.1. Один хорошо, а два лучше.

Программы, написанные на языке Си, могут обращаться к программам на других языках и наоборот, что позволит пользователю использовать необходимые конструкции наиболее эффективно. Если организовать взаимодействие программ, написанных на Си и Паскале, то первый язык предоставляет эффективные средства, приближённые к ресурсам компьютера (обработка бит, операции адресной арифметики и т.п.), а второй – высокоуровневые конструкции (множества, средства простой работы с файлами и т.п.). Кроме того, предоставляется реальная возможность использовать специфические операторы языка. В Паскале это интервальные типы данных, записи с вариантами, средства строгого контроля описаний; в Си – операции (,), (?:), поля, смеси, специальные классы памяти и т.п.

Решение проблем взаимодействия программ на разных языках – вопрос довольно сложный. Рассмотрим его только в общих чертах, чтобы создать общее впечатление о том, как это делается.

Предположим, что программа cipas, написанная на Паскале, должна обратиться к программе fun на Си. Вид этой подпрограммы в Паскале – функция. Ей передаются значения двух переменных i и j целого типа. Функция fun должна возвратить целое значение, равное i-j, которое в программе на Паскале выводится на экран.

Program cipas;
   {$L c:prim.obj}
   var i,j:Integer;
   function fun (i,j:integer):integer; external;
begin
.
   writeln(‘Введите i и j через пробел’);
   read(i,j);
   writeln(fun(i,j));
end.
.

Подключение файла c:prim.obj с функцией fun

Объявление переменных i и j целого типа

Объявление внешней функции (external) fun с прототипами i и j. Функция fun возвращает целое значение.

.

Ввод с клавиатуры значений i и j.

.

Вывод значения функции fun

Объектный модуль функции fun, написанный на Си, находится в файле c:prim.obj, который подключается по директиве {$L c:prim.obj}.

Текст функции fun на Си имеет вид:

Переменным i и j программы на Паскале, соответствуют переменные b и c в программе на Си.

Теперь можно выполнить трансляцию исходного модуля prim.c, например с помощью автономного транслятора TCC.EXE (вместе с файлом TCC.EXE на диске должен присутствовать файл TURBOC.CFG, поставляемый вместе с системой программирования Турбо Си). После выполнения трансляции модуль prim.obj будет записан на диск.

Замечание! При запуске транслятора TTC.EXE в среде ОС необходимо ввести команду: C>TTC A:PRIM.C

Здесь подразумевается, что файл транслятора TTC.EXE находятся на устройстве C:, а исходный текст программы PRIM.C – на устройстве A:.

Рассмотрим другой пример. В программе на Паскале исходные данные вводятся с клавиатуры (a и b) и передаются процедуре fun2 через глобальную область памяти (поэтому функция fun2 не имеет параметров). Затем в функции fun2, написанной на Си, значение a передаётся b, а значение ba. Результаты также помещаются в глобальную память, поэтому они будут доступны программе на Паскале. Ключевое слово extern указывает на то, что переменные a и b объявлены в программе на Паскале. Рассмотрим тексты:

Загрузочный модуль получается так же, как и в примере, рассмотренном выше.

Кроме приведённых примеров, можно рассмотреть также и вызов из программы на Си, программы написанной на Паскале. В приведённых ниже двух программах как раз и рассматривается такой случай: из модуля на Паскале вызывается подпрограмма на Си, и затем из неё вызывается подпрограмма написанная на Паскале.

Процедура fun3 в модуле vvv внешняя; она записана на Си. Из функции на языке Си происходит обращение к внешней функции sum, которая является процедурой, написанной на языке Паскаль. Действия в подпрограмме выбраны очень простыми для облегчения восприятия.

Следует так же заметить, что описание exter void sum(int n); указывает на то, что функция sum не возвращает значений (void) и является внешней (extern). Ей передаётся всего один параметр n целого типа. Переменные a и b доступны основной Паскаль-программе и всем подпрограммам, поскольку помещены в глобальную область.

Google
Rambler's Top100 Яндекс цитирования PageRank

Регистрация доменов .RU по минимальной ценеРегистрация в системе обмена ссылками