Другое личное решение, которое я могу порекомендовать, исходя из личного опыта, заключается в использовании управляемого интерфейса C ++ между ними, если код C ++, к которому вы хотите получить доступ, слишком велик или слишком сложен.
Например, я использую сетевую библиотеку RakNet C ++ в проекте C #. Решения состоят в том, чтобы либо создать массивный класс-оболочку в C # для доступа к необходимым функциям C ++, создать оболочку C ++ вокруг тех функций, которые затем можно использовать в качестве взаимодействия COM, либо использовать Managed C ++ (Visual C ++ / CLI).
Я выбрал последнее, что позволяет мне использовать C ++ для доступа к библиотеке RakNet, но созданные классы можно использовать непосредственно в другом проекте .NET, как будто. Таким образом, основная логика была создана в тех классах Managed C ++, которые также позволяют мне использовать .NET Framework и некоторые из его замечательных функций. В моем проекте на C # мне просто нужно вызвать библиотеку Managed C ++, которая предоставляет мне все 20 функций, которые мне нужны для выполнения всего.