Как обмениваться данными между приложением C ++ и приложением C # без файлов? - PullRequest
3 голосов
/ 19 января 2009

У меня есть приложение C ++ с данными, которые должны быть переданы в приложение C #. В настоящее время я передаю данные через файлы, но, учитывая скорость и количество данных, я хотел бы найти способ обмена данными через память.

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

Итак, мои вопросы: какой лучший способ сделать это? (да, скорость это фактор)

и любая информация или ссылки на информацию, которые могут помочь мне в моих исследованиях и понимании предложенного вами метода, будут очень благодарны.

Спасибо,

Ответы [ 7 ]

7 голосов
/ 19 января 2009

Вы можете использовать именованные каналы для межпроцессного взаимодействия. Я еще не использовал его с земли C ++, хотя ..

5 голосов
/ 19 января 2009

Розетки, ИМО. Он стандартный, быстрый (тем более, если вы работаете на одной машине) и очень гибкий. Файлы с отображенной памятью Я не уверен, что это поддерживается C #, но я могу ошибаться.

3 голосов
/ 19 января 2009

Это довольно сложный вопрос, в основном потому, что нет правильного ответа. Вы определенно могли бы использовать сокеты или отображенные в памяти файлы для связи между двумя процессами. Другими альтернативами являются COM или просто отправка сообщения Windows от одного процесса другому.

2 голосов
/ 19 января 2009

Эммы. Я бы предложил другой подход. Я полагаю, вам будет гораздо проще создать объект (или объекты) в управляемом C ++. Вы можете сохранить все в своем проекте на родном C ++, кроме этого файла / класса, который вы скомпилируете с /clr.

Класс / clr сможет тривиально взаимодействовать с .net, поскольку это .net. Затем вы можете добавить обычные методы C ++ к объекту, чтобы получать и выводить данные по своему усмотрению. Как правило, я бы рекомендовал копировать данные через границу, чтобы вам не нужно было крутиться с помощью пиннинга или чего-то еще.

Требуется немного привыкнуть, но этот подход очень гибок.

Вот кое-что, что говорит об этом лучше, чем я: http://blogs.microsoft.co.il/blogs/sasha/archive/2008/02/16/net-to-c-bridge.aspx

2 голосов
/ 19 января 2009
0 голосов
/ 19 января 2009

Файлы с отображением в памяти изначально недоступны в C #, но вы, вероятно, могли бы что-то сделать с помощью P / Invoke.

0 голосов
/ 19 января 2009

Я бы, вероятно, предложил для этого поискать в межпроцессном взаимодействии. У каждой ОС есть свой метод, но вам, в основном, нужно сигнализировать одно приложение от другого (с сигналом, кодирующим данные и типы данных).

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

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