He leído muchos comentarios sobre programación de GUI, tanto en C # como en C ++. Y noté que el marco .NET de Microsoft es poderoso para la programación GUI. Entonces, ¿es posible usar C ++ y .NET framework?
Creo que será una gran combinación ya que C ++ es un lenguaje poderoso, y .NET framework es el preferido para la programación GUI en Windows, como he leído. ¿Es posible escribir la GUI en C # y la funcionalidad en C ++?
Respuestas:
Sí, anteriormente se conocía como Managed C ++ y ahora C ++ / CLI . Tiene acceso a la totalidad de .NET Framework (GUI: WinForms, GDI +, etc.) como lo haría desde los otros tres lenguajes administrados agrupados, C #, F # y VB.NET.
fuente
No se olvide de la opción más flexible y simple, típica del mundo Unix pero, por alguna razón, no es tan común en Windows: dividir la GUI y la lógica en diferentes procesos, comunicarse a través de cualquier forma razonable de RPC (por ejemplo, incluso una tubería debería trabajo). Preferiblemente con un protocolo de texto simple, legible por humanos.
De esta manera, puede implementar su GUI (o varias GUI) con cualquier tecnología que desee, y construir componentes lógicos a partir de lo que mejor se adapte a sus necesidades: C ++, scripts, cualquier otra cosa.
No conozco ninguna ventaja razonable de un enfoque de diseño monolítico del mundo de Windows.
fuente
Lo hice una vez hace unos años, en los días de Managed C ++. Teníamos algo de lógica de negocios en una DLL administrada que queríamos incorporar a una GUI de estilo asistente escrita en C #. Para hacer esto, creé un ensamblado Managed C ++ para ubicarlo entre la aplicación GUI administrada y la DLL no administrada y usé System :: Runtime :: InteropServices :: Marshal dentro de ese ensamblaje para convertir valores de tipos administrados (System :: Int32) a no administrados tipos (int) y viceversa.
Si bien Managed C ++ parece estar en desuso, el mismo principal podría aplicarse a C ++ / CLI.
fuente
Realmente no. Existe un lenguaje híbrido C ++ / CLI, pero solo es bueno para la interoperación (política oficial de Microsoft). Debido a la forma en que está diseñado .NET Framework, hay muchas semánticas de lenguaje que realmente no se ajustan a la ejecución en el CLR, y C ++ exhibe muchas de ellas.
fuente
El ángulo C ++ / CLI ha sido cubierto por muchas respuestas hasta ahora, pero otra forma de hacerlo es usar PInvoke. Esto permite que los programas de C # invoquen funciones contenidas en dlls que se escribieron en C ++. La ventaja de PInvoke es que su dll es totalmente independiente del hecho de que se llamará desde .Net. Esto significa que puede llamar a dll para los que no tiene código fuente, e incluso si le hiciera el código fuente, no tendría que volver a compilarlo usando la opción / clr. Esto significa que puede usar este dll con otros programas de C ++, así como con programas de C #. Existen algunas bibliotecas fantásticas de C / C ++: PInvoke le permite aprovecharlas. A veces, las bibliotecas Win32 proporcionan funciones que simplemente no están disponibles en .Net: PInvoke le permite usarlas.
Una de las partes más difíciles de usar PInvoke es saber cómo convertir la firma no administrada en una firma administrada. Pero hay una hoja de trucos para ayudar con eso.
fuente
También puede trabajar con un eneldo C # a través de COM (Modelo de objetos componentes). Para mí, COM era mejor que usar Managed C ++ ya que Visual Studio 2010 no tiene intellisense para Managed C ++. En mi caso, ya tenemos una gran aplicación C ++, pero queríamos tratar de alejarnos de MFC a WinForms o WPF.
fuente