Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.09.13;
Скачать: CL | DM;

Вниз

Передача данных между приложениями   Найти похожие ветки 

 
dreamse   (2008-06-24 09:34) [0]

Добрый день.
Хотел бы узнать как можно наиболее эффективно и надежно передавать данные между несколькими приложениями т.е своими модулями расположенными на 1 кмпьютере.

TCP отпадает так как он может быть неустановлен на компьютере.

Как вариант рекомундуют использовать:


получатель:

procedure ReceiveMessage (var Msg: TMessage);
message WM_COPYDATA;
...
procedure TFormReceive.ReceiveMessage;
var
 pcd: PCopyDataStruct;
begin
 pcd := PCopyDataStruct(Msg.LParam);
 Caption := PChar(pcd.lpData);
end;

отправитель:

procedure TFormXXX.Button1Click(Sender: TObject);
var
 cd: TCopyDataStruct;
begin
 cd.cbData := Length(Edit1.Text) + 1;
 cd.lpData := PChar(Edit1.Text);
 SendMessage(FindWindow("TFormReceive", nil), WM_COPYDATA, 0, LParam(@cd));
end;


Но тут вопрос, будет ли сообщение приходить например сервису у которого нет окон?

Возможно есть более универсальное рещение?


 
MBo ©   (2008-06-24 09:42) [1]

Delphi/Demos/IPCDemos


 
Юрий Зотов ©   (2008-06-24 10:06) [2]

> нет окон

Послать сообщение можно и потоку без окон (PostThreadMessage).


 
tesseract ©   (2008-06-24 10:23) [3]


> TCP отпадает так как он может быть неустановлен на компьютере.


Это КАК ТАК? Такого не бывает!  ping 127.0.0.1 работает на всех современных ОС-ях.

Как вариант добавить COM-сервер в сервис, многие так и делают - решаються многие проблемы с маршалингом.


 
dreamse   (2008-06-24 10:33) [4]

> tesseract ©   (24.06.08 10:23) [3]

Были инценденты к сожалению, стандартные TServerSosket вылетает почему то через 3-4 часа непрерывной работы. а Indy тормозят приложение при постоянном коннекте (хотя в Indy думаю что я делал что то неправельно)

> Юрий Зотов ©   (24.06.08 10:06) [2]

Имееться ввиду создать отдельный поток который будет крутиться постоянно и принимать сообщения?


 
Тын-Дын ©   (2008-06-24 10:34) [5]


> tesseract ©   (24.06.08 10:23) [3]
>
> > TCP отпадает так как он может быть неустановлен на компьютере.
>
>
>
> Это КАК ТАК? Такого не бывает!  ping 127.0.0.1 работает
> на всех современных ОС-ях.


Стек протоклов TCP/IP может быть не установлен.
(Азбука начинающего программиста).


 
tesseract ©   (2008-06-24 10:44) [6]


> Стек протоклов TCP/IP может быть не установлен.


Он может быть удалён. По умолчанию он ставиться всегда.


 
Юрий Зотов ©   (2008-06-24 12:14) [7]

> dreamse   (24.06.08 10:33) [4]

> Имееться ввиду создать отдельный поток который будет крутиться
> постоянно и принимать сообщения?

Да, стандартный цикл обработки сообщений.
while GetMessage(Msg, 0, 0, 0) do ...


 
palva ©   (2008-06-24 12:21) [8]


> Имееться ввиду создать отдельный поток который будет крутиться
> постоянно и принимать сообщения?

Любой поток может принимать сообщения, если в нем создана очередь сообщений. Очередь создается автоматически при первом обращении в потоке к функции GetMessage или PeekMessage Если очередь еще не создана, и поток не может принимать сообщение, то PostThreadMessage вернет вам 0


 
palva ©   (2008-06-24 12:26) [9]

GetMessage возвращает сообщение из очереди, а если очередь пуста, то зависает и ждет, пока не появится очередное сообщение.
PeekMessage возвращает сообщение или признак того, что очередь пуста, и продолжает работу потока. При этом возвращаемое сообщение может удаляться из очереди, а может и не удаляться.


 
dreamse   (2008-06-24 12:43) [10]

Спасибо всем. Буду разбираться


 
Игорь Шевченко ©   (2008-06-24 17:53) [11]


> Но тут вопрос, будет ли сообщение приходить например сервису
> у которого нет окон?


не будет. сообщения передаются только внутри одного desktop-а


 
int64   (2008-06-25 19:16) [12]

Старый дедовский DDE.


 
Сергей М. ©   (2008-06-25 19:54) [13]


>  стандартные TServerSosket вылетает почему то через 3-4
> часа непрерывной работы. а Indy тормозят приложение при
> постоянном коннекте


Не надо трындеть.
Просто у тебя ошибка в 17-й строке.


 
DVM ©   (2008-06-25 21:04) [14]


> dreamse   (24.06.08 09:34)  

Способов обмена масса:

1) Сообщения
2) Сокеты (и  не обязательно TCP кстати)
3) Именованные каналы
4) COM и RPC
5) DDE
6) MMF

Самый универсальный - сокеты. Т.к. может быть использован везде, где есть стек нужных протоколов.

Говорить про отсутствие где то там протокола TCP просто смешно в наше время.


 
Leonid Troyanovsky ©   (2008-06-26 18:18) [15]


> DVM ©   (25.06.08 21:04) [14]

> 1) Сообщения

See also [11].

--
Regards, LVT.


 
Тын-Дын ©   (2008-06-27 01:01) [16]


> DVM ©   (25.06.08 21:04) [14]
> Говорить про отсутствие где то там протокола TCP просто
> смешно в наше время.


Не смешно. Во многих местах по условиям применения задачи наоборот ограничения в протоколах.


 
Riply ©   (2008-06-27 03:43) [17]

> Но тут вопрос, будет ли сообщение приходить например сервису у которого нет окон?
> Возможно есть более универсальное рещение?

А я на Pipe`ы реально подсела :)


 
dreamse   (2008-06-27 06:37) [18]

> DVM ©   (25.06.08 21:04) [14]

Очень часто встречаються, все зависит от  того где применяеться ПО
Очень часто встречаю 95 винду и ОЧЕНЬ часто резрешение экрана чтоит 600 - 800 :) хотя и Core Duo 2 + Vista

> Riply ©   (27.06.08 03:43) [17]

А поподробней?


 
Riply ©   (2008-06-27 08:18) [19]

> [18] dreamse   (27.06.08 06:37)
>> Riply ©   (27.06.08 03:43) [17]
> А поподробней?

Да что уж там подробней. Пыталась соскочить,
да вот ценров реабилитации от Pipe`овой зависимости еще не создали :)

А если серьезно, смотри CreateNamedPipe и иже с нею :)
Где-то на форуме была статья Игоря Шевченко с примерами Pipe`ых клиента и сервера.


 
Игорь Шевченко ©   (2008-06-27 14:05) [20]


> Где-то на форуме была статья Игоря Шевченко с примерами
> Pipe`ых клиента и сервера.


ось туточки: http://www.delphimaster.ru/articles/named_pipes/index.html



Страницы: 1 вся ветка

Текущий архив: 2009.09.13;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.013 c
15-1247270707
KilkennyCat
2009-07-11 04:05
2009.09.13
Возможно, не будет работать до понедельника pda.delphimaster.net


4-1215791230
Mielofon
2008-07-11 19:47
2009.09.13
Нужно содержимое большой панели вывести в EMF файл


15-1247250170
Аноним
2009-07-10 22:22
2009.09.13
С днем рождения, Ketmar


15-1247513346
Тима
2009-07-13 23:29
2009.09.13
Требуется помощь в написании программы


4-1217397687
VitGun
2008-07-30 10:01
2009.09.13
Получение данных из таблицы другой программы.