Как передать строку из программы в программу?

Модератор: Модераторы

Как передать строку из программы в программу?

Сообщение Sharfik » 27.10.2014 17:13:46

Нужен совет, задача из программы А в программу Б передать строку команды с параметрами. На будущее хотелось бы чтобы это не было ОС зависимым решением. Кроме как создать соединение и занять порт с подключением к "127.0.0.1" ничего умнее не могу придумать :(
Sharfik
постоялец
 
Сообщения: 482
Зарегистрирован: 20.07.2013 01:04:30

Re: Как передать строку из программы в программу?

Сообщение Лекс Айрин » 27.10.2014 17:42:28

Вызвать программу с данной строкой в параметре.

Копипаст, кстати, кроссплатформенная возможность.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 4248
Зарегистрирован: 19.02.2013 16:54:51

Re: Как передать строку из программы в программу?

Сообщение Sharfik » 27.10.2014 19:18:47

Лекс Айрин писал(а):Вызвать программу с данной строкой в параметре.
Копипаст, кстати, кроссплатформенная возможность.

1. Программа А и Б запущены, и вызвать - создать новую копию, не имеющую отношения к предыдущей и ее данным.
2. Передавать данные через копипаст кощунство. Это функция для пользователя, а не для сервисов программы.
Sharfik
постоялец
 
Сообщения: 482
Зарегистрирован: 20.07.2013 01:04:30

Re: Как передать строку из программы в программу?

Сообщение stanilar » 27.10.2014 19:29:50

Есть у меня следующая идея, и думаю что эта идея платформонезависима: передавайте строку через DLL. Смысл в том, что бинарный код dll (в винде, но и в линухе, думаю так-же), одинаков для всех программ, загрузивших ее.
stanilar
постоялец
 
Сообщения: 272
Зарегистрирован: 09.03.2010 19:09:02

Re: Как передать строку из программы в программу?

Сообщение Sharfik » 27.10.2014 19:34:56

хм.. а как в linux системах выполняют открытие документов в много документом приложении, когда вместо старта второй программы документ открывается в уже открытой вторым окном?
Под Win это можно через SendMessage реализовать, а так не знаю есть ли аналогичная функция...
Sharfik
постоялец
 
Сообщения: 482
Зарегистрирован: 20.07.2013 01:04:30

Re: Как передать строку из программы в программу?

Сообщение svk12 » 27.10.2014 23:42:23

Есть TSimpleIPCServer/TSimpleIPCClient из палитры "System".

http://www.freepascal.org/docs-html/fcl/simpleipc/tsimpleipcserver.html
svk12
постоялец
 
Сообщения: 325
Зарегистрирован: 09.06.2008 18:42:47

Re: Как передать строку из программы в программу?

Сообщение Mirage » 28.10.2014 00:06:28

Нужно гуглить interprocess communication. И да, они все платформозависимые (как и сами процессы), хотя есть стандартные.
Навскидку: общая память, пайпы, сообщения ОС, TCP/IP, файловая система.
Mirage
энтузиаст
 
Сообщения: 829
Зарегистрирован: 06.05.2005 20:29:07
Откуда: Russia

Re: Как передать строку из программы в программу?

Сообщение Sharfik » 28.10.2014 02:44:05

svk12 писал(а):Есть TSimpleIPCServer/TSimpleIPCClient из палитры "System".

ок, посмотрю :)
Sharfik
постоялец
 
Сообщения: 482
Зарегистрирован: 20.07.2013 01:04:30

Re: Как передать строку из программы в программу?

Сообщение *Rik* » 28.10.2014 05:35:58

Sharfik писал(а):
svk12 писал(а):Есть TSimpleIPCServer/TSimpleIPCClient из палитры "System".

ок, посмотрю :)

На Windwos в IPCServer событие о появлении сообщении срабатывает автоматически. На Linux нет, там нужно давать команду проверки, не появилось ли сообщение. Для этого, лучше всего в Linux, организовать отдельный поток, в котором по таймеру IPCServer будет проверять входящие сообщения.
Аватара пользователя
*Rik*
постоялец
 
Сообщения: 373
Зарегистрирован: 19.04.2011 12:18:51
Откуда: Урал

Re: Как передать строку из программы в программу?

Сообщение svk12 » 28.10.2014 11:23:14

Можно прописать обработчик
Код: Выделить всё
Application.OnIdle
с таким кодом :
Код: Выделить всё
  {$IFDEF UNIX}
  if SimpleIPCServer1.Active then
  Self.SimpleIPCServer1.PeekMessage(1,True);
  {$ENDIF}   
svk12
постоялец
 
Сообщения: 325
Зарегистрирован: 09.06.2008 18:42:47


Вернуться в Общие вопросы

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

Рейтинг@Mail.ru