J'ai lu de nombreux commentaires sur la programmation GUI, en C # et C ++. Et j'ai remarqué que le framework .NET de Microsoft est puissant pour la programmation GUI. Est-il donc possible d'utiliser le framework C ++ et .NET?
Je pense que ce sera une excellente combinaison car C ++ est un langage puissant, et le framework .NET est préféré pour la programmation GUI sous Windows, comme je l'ai lu. Est-il possible d'écrire l'interface graphique en C # et la fonctionnalité en C ++?
Réponses:
Oui, il était auparavant appelé Managed C ++ et maintenant C ++ / CLI . Vous avez accès à l'intégralité du .NET Framework (GUI: WinForms, GDI +, etc.) comme vous le feriez à partir des trois autres langages gérés groupés, C #, F # et VB.NET.
la source
N'oubliez pas l'option la plus flexible et la plus simple, typique du monde Unix mais, pour une raison quelconque, pas si courante dans Windows: diviser l'interface graphique et la logique en différents processus, communiquer via toute forme raisonnable de RPC (par exemple, même un tube devrait travail). De préférence avec un protocole de texte simple et lisible par l'homme.
De cette façon, vous pouvez implémenter votre interface graphique (ou diverses interfaces graphiques) avec toutes les technologies que vous préférez, et créer des composants logiques à partir de tout ce qui convient le mieux - C ++, des scripts, etc.
Je ne connais aucun avantage raisonnable d'une approche de conception monolithique du monde Windows.
la source
Je l'ai fait il y a quelques années, à l'époque du Managed C ++. Nous avions une logique métier dans une DLL gérée que nous voulions intégrer dans une interface graphique de type assistant écrite en C #. Pour ce faire, j'ai créé un assembly C ++ managé à placer entre l'application GUI managée et la DLL non managée et utilisé System :: Runtime :: InteropServices :: Marshal au sein de cet assembly pour convertir les valeurs des types gérés (System :: Int32) en non managés types (int) et vice versa.
Bien que C ++ géré semble être obsolète, le même principal peut s'appliquer à C ++ / CLI.
la source
Pas vraiment. Il existe un langage hybride C ++ / CLI, mais il n'est bon que pour l'interopérabilité (politique officielle de Microsoft). En raison de la façon dont le framework .NET est conçu, il existe de nombreuses sémantiques de langage qui ne correspondent vraiment pas à l'exécution sur le CLR, et C ++ en présente un grand nombre.
la source
L'angle C ++ / CLI a été couvert par de nombreuses réponses jusqu'à présent, mais une autre façon de le faire est d'utiliser PInvoke. Cela permet aux programmes C # d'appeler des fonctions contenues dans des DLL écrites en C ++. L'avantage de PInvoke est que votre dll est totalement agnostique quant au fait qu'elle sera appelée depuis .Net. Cela signifie que vous pouvez appeler des DLL pour lesquelles vous n'avez pas de code source, et même si vous l'avez fait, vous n'auriez pas à le recompiler en utilisant l'option / clr. Cela signifie que vous pouvez utiliser cette DLL avec d'autres programmes C ++, ainsi que des programmes C #. Il existe de fantastiques bibliothèques C / C ++: PInvoke vous permet d'en profiter. Parfois, les bibliothèques Win32 fournissent des fonctions qui ne sont tout simplement pas disponibles dans .Net: PInvoke vous permet de les utiliser.
L'une des parties les plus délicates de l'utilisation de PInvoke est de savoir comment convertir la signature non managée en une signature gérée. Mais il y a un cheatsheet pour vous aider.
la source
Vous pouvez également travailler avec une aneth C # via COM (Component Object Model). Pour moi, COM était mieux que d'utiliser Managed C ++, car Visual Studio 2010 n'a pas Intellisense pour Managed C ++. Dans mon cas, nous avons déjà une grande application C ++, mais nous voulions essayer de passer de MFC à WinForms ou WPF.
la source