2009-06-20 37 views
21

Estoy trabajando en un proyecto C++ que no tengo la intención de desarrollar o implementar usando bibliotecas o herramientas .NET, lo que significa que tendría sentido para mí crearlo usando un Visual Aplicación de consola Studio Win32. Sin embargo, he oído que las capacidades de depuración cuando se utiliza una aplicación CLR en Visual Studio son mucho más potentes. Así que tengo un par de preguntas:Aplicación de consola Win32 frente a la aplicación CLR Console

  1. ¿Es cierto que tener una aplicación CLR frente a una aplicación Win32 añade capacidades a su proceso de desarrollo, incluso si usted no utiliza ninguna bibliotecas .NET u otros recursos?

  2. Si es así, ¿podría todavía ser capaz de desarrollar/compilar el proyecto como un proyecto CLR para aprovechar estos aunque estuviese desarrollando un proyecto C++ puro usando STL, etc. y sin aprovechar ningún ¿Funcionalidad .NET? ¿O tal proyecto requeriría diferencias fundamentales que lo hagan no trivial para revertir, lo que significa que debería seguir con una aplicación de consola Win32?

Respuesta

25

respuesta En pocas palabras, si usted no tiene intención de usar el CLR o cualquier objeto de .NET en su aplicación, sólo tiene que utilizar una biblioteca normal de Win32 C++. Hacer cualquier otra cosa le causará dolor en el camino.

Ahora, para responder a la pregunta original sobre la depuración, sí la depuración con el CLR tiene ciertas ventajas sobre la depuración de una aplicación normal de C++. Comenzando con Visual Studio 2005, tanto C# como VB.Net comenzaron a enfocarse en hacer que la visualización de la variable en la ventana locals/autos/watch sea mucho más valiosa. Se realizó principalmente a través de la introducción de atributos .Net como DebuggerDisplay, DebuggerTypeProxy y el marco visualizador.

Sin embargo, si no utiliza ningún tipo .Net, no obtendrá ninguno de estos beneficios.

El evaluador de expresiones C++ no aprovecha ninguno de estos. Tiene sus propios métodos de personalización de visualización de tipos. Pero no es tan funcional (o potencialmente peligroso) como el estilo de atributo porque no permite que el código se ejecute en el proceso de debugge.

Eso no quiere decir que la depuración C++ proporciona una experiencia pobre. Simplemente es diferente y hay mejores pantallas para muchos tipos de contenedores STL.

Depurar una aplicación CLR también tiene ciertas desventajas. Por ejemplo, el código optimizado para la depuración es casi imposible a veces porque el JITer ocultará variables locales, parámetros y a menudo "esto". La depuración de una aplicación C++ construida de manera similar también puede ser frustrante, pero siempre puedes tomar los registros de forma inmejorable para ver qué está sucediendo. Hacer lo mismo para una aplicación CLR es difícil en el mejor de los casos.

+0

Muchas gracias por su respuesta detallada! Me preguntaba si podría elaborar un poco en su primera declaración y explicar qué tipo de problemas tal configuración podría enfrentar a largo plazo? ¿La mayoría vendría de usar inadvertidamente objetos/características de .NET, haciendo que compilen muy bien, y luego tener que cambiar estas partes de su código profundamente integradas en la aplicación más adelante? – bsofman

+0

@bsofman, esencialmente sí. Para aprovechar el CLR y desplegar sin el CLR, necesitaría 2 configuraciones de compilación (una para cada una). Las diferencias entre los idiomas aparecerían en los errores de compilación en una configuración pero no en la otra y terminará siendo bastante molesto – JaredPar

2

Creo que compilar código nativo de C++ en CLR abre una lata de gusanos. A menos que tenga una gran inversión en el código C++ existente y alguna necesidad de ejecutar el código con tipos administrados, esto es algo que desea evitar.

Por ejemplo, C++/CLI es una forma de agrupar código nativo de C++ en un conjunto CLR, pero C++/CLI agrega sintaxis no estándar al lenguaje C++, y el uso de tipos nativos de C++ mezclados con tipos administrados parece una muy problema complicado para decir lo menos.

Así que, en conclusión, simplemente lo mantendría como una aplicación nativa. Si tiene algún plan para portarlo a CLR y acaba de comenzar a trabajar en este proyecto, pensaría seriamente en comenzar a escribir en un lenguaje nativo de CLR como C#.

+0

¡La CLI de C++ da miedo! – toto

1

Esta respuesta copiado de aquí - http://social.msdn.microsoft.com/Forums/vstudio/en-US/895ecb47-8b34-4a1a-a20b-fda1e5e576eb/whats-the-difference-between-clr-console-application-and-win32-console-application

¿Cuál es la diferencia entre la aplicación de consola CLR y aplicación de consola Win32? - El primero usa Common Language Runtime (en otras palabras, .NET framework); este último no.

y no puedo usar el sistema de espacio de nombres en el modelo de aplicación de consola win32. - El espacio de nombres del sistema es parte de .NET framework.

¿Qué debo hacer cuando quiero usar el espacio de nombres? - Debería escribir una aplicación .NET.

y ¿No tiene una sugerencia de entrada como en el modelo C#? - De hecho, no existe IntelliSense para C++/CLI en las versiones existentes de Visual Studio. Si desea una aplicación .NET, C# podría ser una mejor opción de idioma.

Cuestiones relacionadas