Que sea compatible no quiere decir que puedas mezclar alegremente.
.NET acaba haciendo uso de la API de Windows ya que esta API es la única vía para comunicarse con el sistema operativo. Por tanto, antes o después tiene que acabar llamando a código que está escrito en C.
Desde .NET puedes llamar a funciones que están en librerías de C o C++... pero para eso antes tienes que hacer un wrapper de dicha función (tienes que decirle a .NET cómo es la función para que pueda hacer las convenientes transformaciones).
Por supuesto, lo que no puedes hacer es mezclar en una misma compilación C++ con .NET, ya que son cosas diferentes y requieren compiladores diferentes.