C++/CLI - это полноценный язык .NET, и, как и другие языки .NET, он отлично работает в управляемом контексте. Подобно тому, как работа с родными вызовами в C# может быть чередованием боли, C++ и Managed C++ могут привести к некоторым проблемам. С учетом сказанного, если вы работаете с большим родным кодом на C++, я бы предпочел использовать C++/CLI над C#. Есть немало проблем, большинство из которых можно было бы покрыть, не пишите C++/CLI, как если бы вы писали C# и не записывали его так, как если бы вы писали родной C++. Это его собственная вещь.
Я работал над несколькими проектами C++/CLI, и подход, который я бы взял, действительно зависит от воздействия различных уровней приложения на собственный C++-код. Если основная часть приложения является родной, а точка интеграции между нативным и управляемым кодами немного нечеткая, я бы использовал C++/CLI. Преимущество управления в C++/CLI перевешивает его проблемы. Если у вас есть четкие точки взаимодействия, которые могут быть адаптированы или абстрагированы, я бы настоятельно предложил создать слой моста C++/CLI с C# выше и C++ ниже. Основная причина этого в том, что инструменты для C# являются более зрелыми и более повсеместными, чем соответствующие инструменты для C++/CLI. С учетом сказанного, проект, над которым я работал, был успешным и не был кошмаром, на который указывал другой.
Я также хотел бы убедиться, что вы понимаете, почему клиент направляется в этом направлении. Если идея состоит в том, что у них есть куча разработчиков на C++, и они хотят упростить для них переход к написанию управляемого кода, я бы поставил клиенту, что изучение C# может быть менее сложным, чем изучение C++/CLI.
Если клиент считает, что C++/CLI быстрее, это просто некорректно, поскольку все они скомпилированы до IL. Однако, если у клиента много существующей или текущей родной разработки на С ++, тогда текущий путь может быть лучшим.
... Я знаю об этом. Я больше ищу такие вещи, как причуды или дополнительные лакомства, которые могут иметь использование C++/CLI для платформы .NET, а не для использования C# и VB.NET. Например, существует несколько небольших различий между C# и VB.NET, хотя оба они используют CLR. –
Единственная веская причина для управляемого C++ - interop. И тот факт, что вы можете иметь собственные «thunks» (для скорости, которая может быть намного быстрее, чем управляемый код, пример шифрования). ИМО, использующий чистый режим C++/CLI, бесполезен. – leppie