Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Организация взаимодействия между двумя программами, Средствами WinAPI / MFC 
:(
    Опции темы
zhgutov
Дата 3.4.2007, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 120
Регистрация: 14.12.2004

Репутация: 1
Всего: 2



Есть программа №1. Можно запустить несколько ее экземпляров. Нужно сделать так, чтобы программа №2 вызывала определенную функцию во всех запущенных копиях программы №1. Как это сделать средствами WinAPI / MFC?

Это сообщение отредактировал(а) zhgutov - 3.4.2007, 15:09
--------------------
Приполз. Увидел. Укусил.
PM MAIL   Вверх
Sartorius
Дата 3.4.2007, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1568
Регистрация: 18.7.2006
Где: Ivory tower

Репутация: 1
Всего: 37



 Можешь сделать пару LPC клиент/ LPC сервер. Хоть не документировано, но вроде все еще используется. COM объект можешь зарегистрировать еще...

Это сообщение отредактировал(а) Sartorius - 3.4.2007, 15:14
PM MAIL ICQ   Вверх
zhgutov
Дата 3.4.2007, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 120
Регистрация: 14.12.2004

Репутация: 1
Всего: 2



Sartorius
LPC клиент/ LPC сервер — это что? Можешь дать название какой-либо связанной функции, чтобы можно было найти doc в MSDN?

Добавлено через 4 минуты и 23 секунды
А можно обойтись без COM-объектов?
--------------------
Приполз. Увидел. Укусил.
PM MAIL   Вверх
Sartorius
Дата 3.4.2007, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1568
Регистрация: 18.7.2006
Где: Ivory tower

Репутация: 1
Всего: 37



PM MAIL ICQ   Вверх
zhgutov
Дата 3.4.2007, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 120
Регистрация: 14.12.2004

Репутация: 1
Всего: 2



Sartorius
Спасибо!
--------------------
Приполз. Увидел. Укусил.
PM MAIL   Вверх
Earnest
Дата 3.4.2007, 18:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 33
Всего: 183



А просто сообщение специально созданное послать, не проще? Если возврат не интересует, конечно.

Добавлено через 3 минуты и 56 секунд
Код

#define WM_MYMSG  (WM_USER+1000) 
PostMessage (HWND_BROADCAST, WM_MYMSG, 0, 0);
// или можно зарегистрировать сообщение, чтобы уж сосем гарантированно ни с кем не пересечься)

А в программе №1 просто включить обработку этого сообщения.


--------------------
...
PM   Вверх
zhgutov
Дата 5.4.2007, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 120
Регистрация: 14.12.2004

Репутация: 1
Всего: 2



Earnest
А просто сообщение специально созданное послать, не проще?
Нужно, чтобы задержка между посылом и приемом была минимальной и одинаковой для всех программ. Желательно в пределах 10—20 мс.
--------------------
Приполз. Увидел. Укусил.
PM MAIL   Вверх
Partizan
Дата 5.4.2007, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: нет
Всего: 67



Earnest, хммм...а если ещё N левых прог обработают это сообщение? =)


имхо можно просто создать нэймд пайп...прога 2 пишет в этот пайп команду...экземпляры проги 1 из этого пайпа её считывают


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Earnest
Дата 5.4.2007, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 33
Всего: 183



Зарегистрируй свое сообщение (RegisterWindowMessage), и никто левый его не обработает.

Добавлено через 4 минуты и 29 секунд
Цитата(zhgutov @  5.4.2007,  13:46 Найти цитируемый пост)
Нужно, чтобы задержка между посылом и приемом была минимальной и одинаковой для всех программ. Желательно в пределах 10—20 мс. 

Посылка сообщения - это всего лишь помещение его в очереди всех работающих потоков (процессов).
Потом они его будут его извлекать и обрабатывать по мере получения управления - так же как и с любым другим способом запуска. И одновременно уж точно процедура вызвана не будет.



--------------------
...
PM   Вверх
Nastya
Дата 9.4.2007, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 27.3.2002
Где: Мариуполь

Репутация: 3
Всего: 44



Цитата

Earnest, хммм...а если ещё N левых прог обработают это сообщение? =)

Зачем левых, ты можешь послать конкретному окну.. в чем проблема ? smile
Все зависит от втоей конкретики, надо ли тебе передавать параметры в эти функции ? Можно например юзать объекты ядра (типа event) и выставлять их когда что-то должно отработать ...
Это как например, давай конкретнее задачу


--------------------
Что бы понять рекурсию, надо понять рекурсию

"Профессионал - это человек сделавший все возможные ошибки в очень узкой области". Н.Бор
PM MAIL   Вверх
Partizan
Дата 10.4.2007, 10:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: нет
Всего: 67



Nastya, вопрос был не от создателя темы) Earnest gthdsv параметром написала HWND_BROADCAST вследствие чего он и был задан... у меня почему-то было представление что несколько прог могут одно и то же пользовательское сообщение обработать...(со стандартными виндовыми сообщениями помоему дела обстоят именно так)

по поводу вопроса...Earnest на вроде него ответила и я всё понял ;)

з.ы. вопрос в догонку тогда можно ли сделать чтобы несколько моих приложений воспринимали сообщение...допустим такое
Код

#define WM_MYMSG  (WM_USER+1000)


Это сообщение отредактировал(а) Partizan - 10.4.2007, 11:03


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Earnest
Дата 10.4.2007, 20:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 33
Всего: 183



А что мешает? Другое дело, что теоретически другие программы могут объявить себе сообщение с тем же номером (но подразумевать совершенно другое), и тут может возникнуть конфуз...
Эта проблема решается с помощью зарегистрированных текстовых сообщений - маловероятно, чтобы разные приложения придумали одинаковые строки, особенно если их делать подлиннее и предварять своими префиксами (напр. имя программы или, если быть параноиком, гуид сгенерить).
Т.е., конечно, рассылать бродкастом нужно либо стандартные сообщения, либо заведомо уникальные (т.е. зарегистрированные).


--------------------
...
PM   Вверх
Doc_d0s
Дата 14.4.2007, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 206
Регистрация: 15.12.2004
Где: в кресле

Репутация: нет
Всего: 3



Используй MailBox если к скорости не категорично относишься

--------------------
Админ- это вождь Apache'й :)
PM MAIL ICQ   Вверх
Estuark
Дата 19.2.2023, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 19.2.2023

Репутация: нет
Всего: нет




Модератор: Сообщение скрыто.

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.1514 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.