Страница 1 из 1

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

СообщениеДобавлено: 27.10.2014 17:13:46
Sharfik
Нужен совет, задача из программы А в программу Б передать строку команды с параметрами. На будущее хотелось бы чтобы это не было ОС зависимым решением. Кроме как создать соединение и занять порт с подключением к "127.0.0.1" ничего умнее не могу придумать :(

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

СообщениеДобавлено: 27.10.2014 17:42:28
Лекс Айрин
Вызвать программу с данной строкой в параметре.

Копипаст, кстати, кроссплатформенная возможность.

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

СообщениеДобавлено: 27.10.2014 19:18:47
Sharfik
Лекс Айрин писал(а):Вызвать программу с данной строкой в параметре.
Копипаст, кстати, кроссплатформенная возможность.

1. Программа А и Б запущены, и вызвать - создать новую копию, не имеющую отношения к предыдущей и ее данным.
2. Передавать данные через копипаст кощунство. Это функция для пользователя, а не для сервисов программы.

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

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

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

СообщениеДобавлено: 27.10.2014 19:34:56
Sharfik
хм.. а как в linux системах выполняют открытие документов в много документом приложении, когда вместо старта второй программы документ открывается в уже открытой вторым окном?
Под Win это можно через SendMessage реализовать, а так не знаю есть ли аналогичная функция...

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

СообщениеДобавлено: 27.10.2014 23:42:23
svk12
Есть TSimpleIPCServer/TSimpleIPCClient из палитры "System".

http://www.freepascal.org/docs-html/fcl/simpleipc/tsimpleipcserver.html

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

СообщениеДобавлено: 28.10.2014 00:06:28
Mirage
Нужно гуглить interprocess communication. И да, они все платформозависимые (как и сами процессы), хотя есть стандартные.
Навскидку: общая память, пайпы, сообщения ОС, TCP/IP, файловая система.

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

СообщениеДобавлено: 28.10.2014 02:44:05
Sharfik
svk12 писал(а):Есть TSimpleIPCServer/TSimpleIPCClient из палитры "System".

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

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

СообщениеДобавлено: 28.10.2014 05:35:58
*Rik*
Sharfik писал(а):
svk12 писал(а):Есть TSimpleIPCServer/TSimpleIPCClient из палитры "System".

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

На Windwos в IPCServer событие о появлении сообщении срабатывает автоматически. На Linux нет, там нужно давать команду проверки, не появилось ли сообщение. Для этого, лучше всего в Linux, организовать отдельный поток, в котором по таймеру IPCServer будет проверять входящие сообщения.

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

СообщениеДобавлено: 28.10.2014 11:23:14
svk12
Можно прописать обработчик
Код: Выделить всё
Application.OnIdle
с таким кодом :
Код: Выделить всё
  {$IFDEF UNIX}
  if SimpleIPCServer1.Active then
  Self.SimpleIPCServer1.PeekMessage(1,True);
  {$ENDIF}