У меня есть приложение (A), которое должно запустить другое приложение (B). Я должен передать данные между приложениями. Я могу думать о двух подходах. Первое должно открыть сокет. Второе должно обменяться данными через dll.
Вводный подход сокета является прямым.
dll приближаются, у меня есть некоторые вопросы? Я могу загрузить плагин dlls в B. Я хочу создать dll, который A может использовать для передачи данных B. При загрузке dlls, только один экземпляр загруженного dll? Если так, это означает, что данные могут быть совместно использованы приложениями, которые загружают dll?
Каков лучший выбор?
Есть ли другие способы сделать это?
Вы не можете эффективно обмениваться данными через DLL. Other ways:
Самый простой метод (предполагая Windows, поскольку вы упоминаете DLL), вероятно, заключается в использовании CreateProcess и открытии канала к дочернему процессу, как описано в упрощенной форме здесь: http://msdn.microsoft.com/en-us/library/ms682499.aspx
Именованные трубопроводы могут быть альтернативой, особенно если вы не контролируете время жизни всех процессов. http://msdn.microsoft.com/en-us/library/aa365590.aspx
Для простых случаев почтовые слоты могут быть достаточной альтернативой.
http://msdn.microsoft.com/en-us/library/aa365574.aspx#base.using_a_mailslot_for_ipc
Вот более длинный список различных методов межпроцессного взаимодействия для Windows. http://msdn.microsoft.com/en-us/library/aa365574.aspx
Для чего-то, происходящего локально, использование сокетов кажется излишеством. К тому же вам придется реализовать собственный механизм безопасности для предотвращения атак спуфинга, а не полагаться на интегрированный механизм безопасности большинства других методов IPC.
Всегда полезно исследовать альтернативные возможные решения, но я лично считаю, что использование сокетов в качестве транспортного уровня для данных между приложениями не только перспективно, но и масштабируемо. Использование сокетов избавит вас от необходимости писать большое количество кода для конкретной ОС, что может помешать вам в будущем переносить ваше приложение на операционные системы, отличные от Windows.
Я бы посоветовал розетки.
У вас может быть общий кэш (например, служба windows или скрытый процесс), который может прослушивать - возвращать данные всем подписчикам. Для этого используется паттерн Observer.
Я бы согласился с Juan Zamora M, за исключением того, что сервис, предоставляющий данные, должен иметь API, который можно запрашивать по мере необходимости, а не подталкивать при изменении через слушателей.