Если вам нужно работать с нативным кодом довольно тесно, C ++, вероятно, сделает жизнь проще. Однако нет ничего плохого в том, чтобы использовать P / Invoke для вызова Win32 API из C #, VB.NET, F # и т. Д.
Не все языки .NET одинаковы с точки зрения возможностей, хотя C # и VB.NET в значительной степени эквивалентны по функциональности. Я знаю, что есть некоторые вещи, которые предоставляет C ++ / CLI, которые не представлены C # или VB.NET - я не знаю, верно ли обратное. (Я не знаю, как выглядит C ++ / CLI для лямбда-выражений, методов расширения и т. Д.)