Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2009.09.13;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.005 c
15-1247170961
Roman111
2009-07-10 00:22
2009.09.13
LTP порт принтера


15-1247344205
Юрий
2009-07-12 00:30
2009.09.13
С днем рождения ! 12 июля 2009 воскресенье


15-1248031803
Юрий
2009-07-19 23:30
2009.09.13
С днем рождения ! 18 июля 2009 суббота


11-1205672007
Trible
2008-03-16 15:53
2009.09.13
Вопрос по KOLmdvXLGrid


15-1247691352
Германн
2009-07-16 00:55
2009.09.13
Сколько максимально может потреблять телевизор ЭЛТ





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский