Глава 6

Взаимодействие
приложения с внешними
программами

6.1 Запуск из приложения внешних программ

Взаимодействие приложения с внешними программами может происходить
различными способами. Это может быть:

• непосредственный запуск внешней программы из вашего приложения

• запуск внешней программы, связанной с некоторым документом

• обмен с приложениями сообщениями Windows

• технология OLE — внедрения и связывания документов, подготовленных
внешними программами, в ваше приложение

• динамический обмен данными между приложениями — DDE

Начнем с рассмотрения первой из этих возможностей — запуска из приложе-
ния внешней программы. Такая необходимость может возникать в ряде случаев.
Например, ваша задача может заключаться в создании с помощью C++Builder по-
льзовательского интерфейса к какой-нибудь ранее разработанной для MS-DOS или
Windows программе, которая представлена только своим выполняемым модулем.
Исходный текст программы может быть при этом вам не известен или он может
быть написан на языке, отличающемся от С и C++. Тогда естественным способом
решения этой задачи является запуск загрузочного модуля программы из вашего
приложения — интерфейса. Другой пример использования внешней программы —
желание предоставить пользователю, работающему с вашей программой, какие-то
дополнительные возможности. Например, вам может захотеться дать пользовате-
лю возможность вызвать из вашего приложения программу Windows «Калькуля-
тор», чтобы просчитать какие-то данные, которые он получил в процессе работы с
приложением, и принять решение о своих дальнейших действиях.

Запуск внешней программы из приложения C++Builder можно сделать неско-
лькими способами. Ниже рассматриваются наиболее простые из них.

6.1.1 Запуск внешней программы функцией execlp

Функция execlp позволяет выполнить из своего приложения любое указанное
приложение, передав ему управление. Вызванная программа замещает в памяти
вызвавшее ее приложение. Таким образом, родительское приложение завершается
и начинается новое.

Функция execlp определена в файле process.h (не забывайте включать его в
приложение соответствующей директивой #include) следующим образом:

int execlp(char *path, char *arg0,*argl, ..., *argn, NULL)

Параметр path определяет имя и путь к приложению, которое требуется вы-
полнить. Если в path указан путь и имя файла с расширением, то функция ищет
именно этот файл. Если же расширение файла не задано, то сначала ищется файл
такой, который задан. Если он не находится, к имени добавляется расширение