Межпроцессное взаимодействие между приложением C # и неуправляемым приложением C ++ - PullRequest
6 голосов
/ 12 февраля 2009

У меня есть две службы Windows, первая из которых написана на C #, а вторая - на неуправляемый C ++, я хочу знать, как я могу сделать двустороннее межпроцессное взаимодействие.

Ответы [ 8 ]

7 голосов
/ 12 февраля 2009

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

Однако, если есть хоть малейшая вероятность того, что в какой-то момент эта связь может произойти через границы машины, используйте подход сокетов. Для C ++ вам понадобится заголовочный файл winsock2.h. В C # используйте пространство имен System.Net.Sockets.

Прошло много времени с тех пор, как я создал неуправляемый C ++, но я помню, что вам придется писать меньше кода C ++, если вы создадите сервер на стороне C ++, а затем используете TcpClient класс на стороне C #.

2 голосов
/ 12 февраля 2009

Сокеты - это, вероятно, ваш лучший выбор.

С помощью сокетов вы не обязательно привязаны к обеим программам, находящимся на одной машине.

Кроме того, это, вероятно, самый переносимый вариант (черт, в Windows даже есть select () для сокетов).

1 голос
/ 12 февраля 2009

Я бы сказал, сокеты и система обмена сообщениями. Проверьте наш на Буферы протокола Google .

1 голос
/ 12 февраля 2009

Есть несколько способов сделать это, но я думаю, что лучшим способом было бы использовать WCF и COM +. Если вы размещаете службу в COM +, вы можете получить к ней доступ через WCF в вашей службе .NET и через интерфейсы COM в неуправляемом коде.

Для начала вы можете проверить следующие разделы документации MSDN:

Интеграция служб WCF с COM +: http://msdn.microsoft.com/en-us/library/bb735856.aspx

Интеграция с приложениями COM + Обзор: http://msdn.microsoft.com/en-us/library/ms734723.aspx

1 голос
/ 12 февраля 2009

Сокеты и именованные каналы - это два варианта, которые хорошо поддерживаются в управляемых и неуправляемых средах.

0 голосов
/ 06 мая 2015

Я бы сказал, что Redis будет лучшим решением для любого межпроцессного взаимодействия

0 голосов
/ 12 февраля 2009

Создать объект Singleton COM. Ведение данных в этом COM-объекте, которые могут быть прочитаны приложениями C ++ и C #.

0 голосов
/ 12 февраля 2009

Используйте либо DCOM / RPC, либо именованные каналы - все остальное либо небезопасно, либо взломано, либо и то, и другое.

...