Форум: "Основная";
Текущий архив: 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