Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Передача данных между приложениями [D7, Win2k, WinXP]


dreamse ©   (2008-06-24 09:34:00) 

Добрый день.
Хотел бы узнать как можно наиболее эффективно и надежно передавать данные между несколькими приложениями т.е своими модулями расположенными на 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;


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

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


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


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


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


Riply   (2008-06-27 08:18:00) [2]

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

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

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


dreamse   (2008-06-27 06:37:00) [3]

> 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 03:43:00) [4]

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

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


Тын-Дын   (2008-06-27 01:01:00) [5]


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


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


Leonid Troyanovsky   (2008-06-26 18:18:00) [6]


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

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

See also [11].

--
Regards, LVT.


DVM   (2008-06-25 21:04:00) [7]


> dreamse   (24.06.08 09:34)  

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

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

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

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


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


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


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


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

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


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


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


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


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

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


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

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


palva   (2008-06-24 12:21:00) [13]


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

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


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

> dreamse   (24.06.08 10:33) [4]

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

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


tesseract   (2008-06-24 10:44:00) [15]


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


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


Тын-Дын   (2008-06-24 10:34:00) [16]


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


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


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

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

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

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

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


tesseract   (2008-06-24 10:23:00) [18]


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


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

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


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

> нет окон

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


MBo   (2008-06-24 09:42:00) [20]

Delphi/Demos/IPCDemos


Наверх

Титульная страница Поиск, карта сайта Написать письмо