Как я могу отправить сообщение из приложения VB6 в мое приложение C # - PullRequest
1 голос
/ 29 июня 2011

Привет, есть приложение VB6 для Windows (old.exe) и отдельное приложение C # Winforms (new.exe).Они оба работают на одной машине с Windows.

У меня есть доступ к исходному коду VB6 и C #, но приложения должны оставаться отдельными.

Если оба работают и имеют знания одруг друга (идентификатор процесса), Как лучше всего отправить сообщение из одного окна в другое?

Обновление:

В этомВ этом случае я говорю только об очень редких и небольших сообщениях - например, измените вкладку, которую вы просматриваете, используя маленькое сообщение, например, «Счет-фактура 67»

Двунаправленный обмен сообщениями был бы хорош, но VB6 для.Net является наиболее важным.

Ответы [ 6 ]

2 голосов
/ 29 июня 2011

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

Для локальных решений, например MSMQ, существует множество документов, демонстрирующих простоту этой инфраструктуры обмена сообщениями.

для более широких сценариев следует рассмотреть Windows Azure Storage Queues, выполучить практически идентичное удобство использования, но с более широкой доступностью и улучшенными инструментами управления.

MSMQ зависит от домена. Azure охватывает весь мир.

2 голосов
/ 29 июня 2011

Вот более-менее полный список альтернатив IPC для Windows.

http://msdn.microsoft.com/en-us/library/aa365574%28v=vs.85%29.aspx

Большинство из них могут быть использованы также из VB6 и C #.

2 голосов
/ 29 июня 2011

Согласен с комментариями Клэя.

Однако я сделаю удар в темноте и пойду с наиболее очевидным ответом:

.NET (w / WCF) поддерживает как IPC, так и именованные каналы для локальной внутрипроцессной связи,

Вот ссылка на тему с использованием именованных каналов ... но она очень старая и не использует WCF, как следует ... но суть та же: http://www.switchonthecode.com/tutorials/interprocess-communication-using-named-pipes-in-csharp Обновленная версияиспользуя WCF: http://www.switchonthecode.com/tutorials/wcf-tutorial-basic-interprocess-communication

1 голос
/ 01 июля 2011

Решение, которое я использовал для этой цели, состоит в том, чтобы обеспечить связь TCP между процессами. Это позволяет для двунаправленной связи. И в качестве бонуса, если вы когда-нибудь переместите одно из приложений в другое окно, ваши приложения будут продолжать работать с очень небольшими изменениями.

В .NET вы можете использовать множество классов для этой цели (тонна вещей от низкого уровня до высокого уровня в System.Net). В VB6 вы можете использовать элемент управления Winsock, который поставляется вместе с IDE. Я использую Dart Winsock control (стоит $$$), просто потому, что он гораздо более гибкий.

Я настроил оба приложения для отправки / получения фрагментов XML с известной схемой. Обычно существует атрибут, который сообщает другому приложению тип получаемого сообщения, а также полезную нагрузку.

0 голосов
/ 29 июня 2011

Окончательный ответ на этот вопрос

Виртуальный нулевой модем: http://en.wikipedia.org/wiki/Null_modem#Virtual_null_modem

Из Википедии:

Виртуальный нуль-модем способ связи для соединения двух компьютерные приложения, непосредственно использующие виртуальный последовательный порт. В отличие от нуля модемный кабель, виртуальный нуль-модем программное решение, которое имитирует аппаратный нуль-модем в пределах компьютер. Все особенности оборудования нуль-модем доступен в виртуальном нуль-модем. Есть некоторые Преимущества для этого:

Более высокая скорость передачи последовательных данных (ограничена производительностью компьютера только). Возможно виртуальное соединение через сеть или Интернет, смягчающий кабель ограничения по длине. Возможно неограниченное количество виртуальных подключений. Нет последовательного кабеля не требуется. Физические последовательные порты компьютера остаются свободными.

Например, DOSBox разрешил старшее DOS-игры для использования виртуальных нуль-модемов.

Другой распространенный пример состоит из unix псевдо-терминалы (pty), которые представить стандартный интерфейс tty для пользовательские приложения, в том числе виртуальные серийный контроль. Два таких ptys могут легко быть связаны друг с другом приложение для формирования виртуального нуля модемный канал связи.

С ОСНОВНЫМ ОСНОВАНИЕМ этого решения: ЭТО ТРЕБУЕТСЯ

* Примечание; Это попытка юмора. Простите, если это не смешно.

0 голосов
/ 29 июня 2011

Базовое решение (на основании предоставленной информации):

Создание выделенной папки для входящих и исходящих сообщений (одна папка для входящих приложений будет являться исходящей папкой для других)

Запись сообщений (или данных) в текстовый / xml или другой формат в выходную папку (добавление поля «Источник», чтобы приложение знало, откуда оно)

Чтение сообщений на основе даты и импорт сообщений / данных

Это позволяет интегрировать в / из любого приложения.

...