Pregunta

Estoy empezando mi primer proyecto de C ++. Estoy usando Visual Studio 2008 . Es una aplicación de Windows de un solo formulario que accede a un par de bases de datos e inicia una transacción de WebSphere MQ. Básicamente entiendo las diferencias entre ATL, MFC, Win32 (estoy un poco confuso en eso) y CLR, pero no sé cómo debería elegir.

¿Hay uno o más de estos solo para compatibilidad con versiones anteriores?

¿Es CLR una mala idea ?

Cualquier sugerencia apreciada.

Editar: Elegí C ++ para este proyecto por razones que no mencioné en el post, que no son del todo técnicas. Entonces, suponiendo C ++ es la única / mejor opción, ¿cuál debería elegir?

¿Fue útil?

Solución

Depende de tus necesidades.

El uso de CLR le proporcionará el conjunto más expresivo de bibliotecas (todo el marco .NET), a costa de restringir su ejecutable para que requiera que se instale el marco .NET en tiempo de ejecución, así como limitarlo a Plataforma de Windows (sin embargo, las 4 tecnologías enumeradas son solo de Windows, por lo que la limitación de la plataforma es probablemente la menos problemática).

Sin embargo, CLR requiere que use las extensiones C ++ / CLI al lenguaje C ++, por lo que, en esencia, tendrá que aprender algunas funciones de lenguaje adicionales para poder usar esto. Hacerlo te da muchos " extras, " como el acceso a las bibliotecas .net, la recolección de basura completa, etc.

ATL & amp; MFC es un poco más difícil decidir entre. Lo referiría a página de MSDN para elegir Para decidir entre ellos. Lo bueno de ATL / MFC es que no necesita el marco .NET, solo los tiempos de ejecución de VC / MFC que se instalarán para la implementación.

Usar Win32 directamente proporciona los ejecutables más pequeños, con la menor cantidad de dependencias, pero es más trabajo de escribir. Tienes la menor cantidad de bibliotecas auxiliares, por lo que estás escribiendo más código.

Otros consejos

Win32 es la forma simple y simple de hacerlo. Es tedioso, difícil de usar y tiene una gran cantidad de pequeños detalles que debes recordar, de lo contrario, las cosas fallarán de manera relativamente misteriosa.

MFC se basa en Win32 para proporcionarle una forma orientada a objetos de construir su aplicación. No es un reemplazo para Win32, sino una mejora, hace un gran trabajo por ti.

System.Windows.Forms (que es lo que supongo que entendiste por CLR) es completamente diferente pero tiene grandes similitudes con MFC desde su estructura básica. Es, por mucho, el más fácil de usar, pero requiere el marco .NET, que puede o no ser un obstáculo en su caso.

Mi recomendación: si necesita evitar .NET, use MFC, de lo contrario use .NET (de hecho, en ese caso, usaría C # porque es mucho más fácil trabajar con).

En lo que respecta a C ++, usaría WTL. Es liviano y tendrá pocas dependencias (si las hay), lo que facilita el envío y la instalación. Encuentro muy satisfactorio cuando mi aplicación consta de un solo EXE que se ejecutará en la mayoría de las versiones de Windows, pero esto puede no ser una preocupación para usted.

Si elige ir a .NET en su lugar, entonces C # es casi seguramente el camino a seguir.

Más en WTL aquí:

http://www.codeproject.com/KB/wtl/wtl4mfc1.aspx

Me gustaría saber por qué harías esto en C ++. Según su breve descripción, C # suena como una opción mucho más apropiada.

Solo para elaborar un poco, mire el enlace que dio describiendo el CLR de C ++. Las notas de respuesta mejor calificadas (con precisión, en mi opinión) de que C ++ es apropiado para " kernel, juegos, aplicaciones de alto rendimiento y servidor " - Ninguno de los cuales parece describir lo que estás haciendo.

MFC, ATL, etc. serán compatibles en el sentido de que sí, podrá compilar su aplicación en futuras versiones de Visual Studio y ejecutarlas en futuras versiones de Windows. Pero no se admiten en el sentido de que no hay muchos desarrollos nuevos en la API o en el lenguaje de la misma manera que en CLR y C #.

No hay nada malo con CLR. Al igual que otros, sugeriría C #, pero como tienes razones para seguir con C ++, usar el .NET framework es varios miles de veces más fácil que jugar con ATL / MFC si aún no estás familiarizado con ellos (IMO).

Puede que valga la pena mencionar que si estás usando C ++ / CLR, entonces realmente no estás usando C ++ en absoluto. C ++ / CLR compila a CIL al igual que C #. Nunca lo usé, pero creo que su propósito es permitirle compilar el código heredado y hacerlo fácilmente disponible para el nuevo código .NET en lugar de permitir que el nuevo código funcione con los antiguos ejecutables de C ++. Existen otros métodos para llamar a código nativo desde .NET que, tal vez, debería explorar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top