Если очень хочется, то можно звать C++ методы из C# кода и наборот. Например, если какие-то приятные функции есть в C++ API, но их нет в C#, их можно подключить следующим образом:
Mixing .NET and native code
Все это выглядит легко и просто на таких маленьких примерах. Однако, если приложение у вас несколько больше размером, то начинают всплывать неприятные проблемы. Итак, проблемы, которые встретились мне.
Порча C# кучи
Если у вас намешан C++ и C# код, то из C++ можно залезть в C# кучу. Поробнее проблема разобрана в блоге Тесс Феррандес:
.NET Crash: Managed Heap Corruption calling unmanaged codeКстати, очень рекомендую ее блог. В постах до 2011 года она пишет про отладку, про WinDbg.
Потеря AppDomainПри переключении между C++ и C# кусками можно потерять текущий C#-контекст. Текущую директорию, например, что неприятно. Есть
способы борьбы, которые работают не всегда.
Вот тут человек разбирает конкретный пример:
Unmanaged callbacks across AppDomains.
Также есть разные
кривые методы получения списка всех AppDomain'ов.