Visual Studio 2008 - совместное использование данных в C ++ / C # Multi Project Solution - PullRequest
1 голос
/ 18 ноября 2009

У меня есть решение с 2 проектами:

  1. главный проект c ++
  2. проект c # (симулятор дисплея)

Сегодня эти 2 приложения обмениваются данными с использованием петлевого соединения клиент / сервер TCP, но это не очень оптимально (проблемы с синхронизацией ...).

Мне было интересно, есть ли способ получить доступ к данным c # из проекта c ++ напрямую и наоборот? (Похоже, это возможно с 2 C # проектов ..) Если это невозможно, каков наилучший способ реализовать это с общей памятью?

спасибо! Michael

РЕДАКТИРОВАТЬ: спасибо за ответы. Эти 2 проекта раньше были независимыми решениями и являются исполняемыми файлами - на самом деле я пытаюсь объединить 2 в 1 решение / исполняемый файл. Для справки: Приложение c ++ - это версия встроенного приложения для ПК - приложение c # - это симулятор lcd / HMI.

Ответы [ 4 ]

1 голос
/ 18 ноября 2009

Преобразование проекта C ++ в проект C ++ / CLI может быть самым простым способом. Однако обратите внимание, что некоторый код плохо работает с C ++ / CLI (у нас были проблемы с использованием библиотек, использующих boost :: thread в управляемом исполняемом файле).

0 голосов
/ 18 ноября 2009

именованных каналов?

Для межпроцессного взаимодействия по именованным каналам вы можете проверить функцию .NET 3.5 http://msdn.microsoft.com/en-us/library/system.io.pipes.aspx для стороны C #. Со стороны C ++, я полагаю, вы знаете эквивалент:).

0 голосов
/ 18 ноября 2009

Есть два способа получения прямого доступа к памяти между c ++ и c # без дополнительных затрат на маршалинг / демаршалинг и com. Если требуется сохранить часть вашего кода на языке c ++, то я знаю, что единственный способ добиться этого - разместить clr в вашем приложении c ++. Относительно сложное мероприятие. Google "хостинг общеязыковой среды выполнения". Затем вы можете загрузить свой код C # как сборку, вызвать код C # и предоставить общий интерфейс в стиле совместной памяти. Хотя вам придется самостоятельно писать поддержку всей совместно используемой памяти, поскольку я не нашел прямой поддержки совместно используемой памяти в c # /. Net.

Другой способ - скомпилировать ваш код на C ++ с поддержкой общеязыковой среды выполнения. Это намного проще и позволит вам использовать всю мощь и славу c ++, одновременно предоставляя доступ к типам данных на основе clr и возможность осуществлять обратный вызов между вашим кодом c ++ и c #. См. «Языковые функции для нацеливания на CLR» в документации к VS2008. В этом процессе pin_ptr станет вашим близким другом и союзником.

0 голосов
/ 18 ноября 2009

Вы можете использовать COM Interop или Платформа Invoke для доступа к собственному коду в C #.

Если это не то, что вы просите, уточните.

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