Синтаксис C ++ / CLI неудобен, но он позволяет вам выставлять управляемые объекты из кода C ++. Это может быть удобно, если у вас большой API C ++ и вы можете абстрагировать некоторые из этих функций в более простой интерфейс для использования вашим управляемым кодом. Я сделал это успешно для интеграции с такими инструментами, как библиотека видений Matrox, где я мог написать свой код анализа видения на C ++, а затем использовать расширения C ++ / CLI для предоставления высокоуровневых управляемых классов. Наиболее болезненной частью, вероятно, является взаимодействие строк и массивов, но строки всегда были болезненными, даже в простом C ++.
C ++ / CLI может определенно потреблять любые управляемые объекты .NET, но вы должны быть особенно осторожны, если используете указатели на управляемую память (в этом случае вам придется использовать закрепление.) Если мне нужно передать указатели на API, я обычно предпочитаю оставить эту память неуправляемой, а затем создавать управляемые классы-оболочки для манипулирования неуправляемой памятью.