Какие методы Windows IPC - PullRequest
       15

Какие методы Windows IPC

4 голосов
/ 27 апреля 2010

Вопрос: У меня есть dll, которую я могу загрузить в другую программу. Теперь DLL имеет доступ ко всем данным / функциям в другой программе.

Какую технологию я могу использовать, чтобы внешняя программа могла отправлять данные / команды в эту dll, управлять другой программой или получать данные из нее?

Я имею в виду, что в прошлом это означало DDE, я думаю, что это было в Windows 3.11 / 95 раз. Что я могу использовать сегодня? Которой легче ? Какой из них самый быстрый?

Ответы [ 4 ]

6 голосов
/ 27 апреля 2010

Некоторые из них:

  • Именованные трубы . Довольно прост в реализации.
  • Общая память . Немного больше работы, но, возможно, немного быстрее (по крайней мере, в моем тестировании).
  • Гнезда . Это довольно просто и очень портативно, но не так высокоэффективно. Но, конечно, приятно, если вы вдруг захотите установить связь с процессом, запущенным на другом компьютере.
4 голосов
/ 27 апреля 2010

COM является де-факто стандартным механизмом IPC для приложений, ориентированных на Windows, в настоящее время.

Он обеспечивает доступ через языковые барьеры, решает проблему совместимости двоичного интерфейса, выполняет прозрачное распределение для вас и имеет различные модели потоков.

sharptooth кратко изложил некоторые факты здесь .

0 голосов
/ 22 февраля 2013

Для простой и быстрой связи вы можете рассмотреть Почтовые ящики . Они довольно просты в использовании. Вы взаимодействуете с ними, как файл.

Почтовые ящики наиболее подходят, когда вы хотите передавать команды нескольким получателям или получать сообщения от нескольких производителей, и ваш дизайн может допускать случайное потерянное сообщение. Упомянутые выше именованные каналы лучше подходят для IPC с одним процессом к одному процессу с гарантированной доставкой.

Хорошие новости

  • Они очень просты для внедрения
  • Они поддерживают асинхронную работу
  • Их можно использовать даже с учетом изоляции процессов Windows. Это означает, что вы можете использовать их для связи между различными сеансами пользователя (например, с помощью служб Windows)
  • Они могут транслировать сообщения на весь домен, открыв почтовый ящик в «\ * \ mailslot [path] name». Когда вы пишете в почтовый ящик с таким именем, он отправляет его в каждый почтовый ящик с таким именем на каждом компьютере в вашем домене

Плохие новости

  • Только 424 байта могут быть переданы по сети. Больше данных может быть передано локально
  • Они основаны на UDP, поэтому используйте их только в случае потери сообщения время от времени.
  • Время от времени (особенно в многопроцессорных системах) сообщения могут доставляться немного не в порядке

Доступно много образцов, но у меня еще недостаточно представителей, чтобы публиковать больше, чем один. в CodeProject в C ++

0 голосов
/ 09 января 2012

Не забудьте Remoting , для более высокого уровня возможностей в .NET

...