Отправка больших объемов данных из приложения Unmannaged C ++ в Managed C # - PullRequest
0 голосов
/ 03 августа 2011

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

Однако объем выходных данных довольно велик, и мы ищем лучший подход к этому. Идеальное решение, использующее что-то вроде Memorystream, было бы идеальным, поскольку было бы легко переключить генерацию вывода с файлового потока на поток памяти.

Однако, как можно преодолеть разрыв между управляемым и неуправляемым? Какой самый эффективный способ сделать это?

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

Спасибо

Ответы [ 3 ]

3 голосов
/ 03 августа 2011

Вы можете попробовать именованную трубу http://www.switchonthecode.com/tutorials/interprocess-communication-using-named-pipes-in-csharp

0 голосов
/ 03 августа 2011

Почему бы не использовать стандартный ввод / вывод?Ваша программа на C ++ может записывать в стандартный вывод с помощью обычных команд «printf» или «cout».

Приложение .NET может затем захватить эти данные, например, с помощью http://msdn.microsoft.com/en-us/library/system.diagnostics.process.standardoutput.aspx,.То же самое относится и к стандартному вводу: используйте stdin для отправки команд в программу C ++.

Использование именованных каналов - это хорошо, и может быть ответом, если вам нужно более двух потоков.Но, вероятно, было бы больше работы над C ++.

0 голосов
/ 03 августа 2011

это зависит от того, как вы производите / потребляете данные

  • именованные каналы или сокеты - постоянный поток данных
  • общая память - постоянные обновляемые данные
...