Comment puis-je décider d'utiliser ATL, MFC, Win32 ou CLR pour un nouveau projet C ++?

StackOverflow https://stackoverflow.com/questions/821676

  •  03-07-2019
  •  | 
  •  

Question

Je commence juste mon premier projet C ++. J'utilise Visual Studio 2008 . C'est une application Windows à formulaire unique qui accède à quelques bases de données et initie une transaction WebSphere MQ. Je comprends fondamentalement les différences entre ATL, MFC, Win32 (en fait, je suis un peu confus) et CLR, mais je ne sais pas comment choisir.

Est-ce qu’un ou plusieurs d’entre eux sont là pour la compatibilité descendante?

Le CLR est-il une mauvaise idée ?

Toutes les suggestions ont été appréciées.

Modifier: J'ai choisi le C ++ pour ce projet pour des raisons que je n'ai pas abordées dans le post, qui ne sont pas entièrement techniques. Donc, en supposant que C ++ soit la seule / meilleure option, laquelle dois-je choisir?

Était-ce utile?

La solution

Cela dépend de vos besoins.

L’utilisation du CLR vous fournira l’ensemble de bibliothèques le plus expressif (l’ensemble du framework .NET), au prix de contraindre votre exécutable à exiger que le framework .NET soit installé à l’exécution, ainsi que de vous Plate-forme Windows (toutefois, les quatre technologies répertoriées ne sont que Windows, la limitation de la plate-forme est probablement la moins gênante).

Toutefois, CLR vous oblige à utiliser les extensions C ++ / CLI du langage C ++. Par conséquent, vous aurez besoin d'apprendre quelques fonctionnalités supplémentaires du langage pour pouvoir l'utiliser. Vous obtiendrez ainsi de nombreux "extras". tels que l’accès aux bibliothèques .net, la collecte complète des déchets, etc.

ATL & amp; Les MFC sont un peu plus difficiles à choisir. Je vous renvoie à la page de choix de MSDN . afin de décider entre eux. La bonne chose à propos d’ATL / MFC est que vous n’avez pas besoin du framework .NET, seuls les environnements d’exécution VC / MFC doivent être installés pour le déploiement.

L’utilisation directe de Win32 fournit les plus petits exécutables, avec le moins de dépendances possibles, mais demande plus de travail. Vous avez le moins de bibliothèques d'assistance, vous écrivez donc plus de code.

Autres conseils

Win32 est le moyen brut et brutal de le faire. Il est fastidieux, difficile à utiliser et contient de nombreux petits détails dont vous devez vous souvenir, sinon les choses échoueront de manière relativement mystérieuse.

MFC s'appuie sur Win32 pour vous fournir un moyen orienté objet de créer votre application. Ce n'est pas un remplacement de Win32, mais plutôt une amélioration - il fait beaucoup de travail dur pour vous.

System.Windows.Forms (ce que je suppose que vous entendiez par CLR) est complètement différent mais présente de grandes similitudes avec MFC par rapport à sa structure de base. C’est de loin le plus simple à utiliser, mais il nécessite le framework .NET, qui peut ou non être un obstacle dans votre cas.

Ma recommandation: si vous devez éviter .NET, utilisez MFC, sinon utilisez .NET (en fait, dans ce cas, j'utiliserais C #, car il est beaucoup plus facile de travailler avec).

En ce qui concerne C ++, je voudrais utiliser WTL. C'est léger et vous aurez peu (le cas échéant) de dépendances, ce qui facilite l'expédition et l'installation. Je trouve cela très satisfaisant lorsque mon application consiste en un seul fichier EXE qui s’exécutera sur la plupart des versions de Windows, mais cela ne vous concerne peut-être pas.

Si vous choisissez plutôt .NET, alors C # est certainement le chemin à parcourir.

Plus d'informations sur WTL ici:

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

Je serais très curieux de savoir pourquoi vous le feriez en C ++. Selon votre brève description, C # semble être un choix bien plus approprié.

Pour en dire un peu plus, regardez le lien que vous avez donné décrivant le CLR C ++. Les notes de réponse les mieux notées (avec précision, à mon avis) que le C ++ convient aux "applications noyau, jeux, hautes performances et serveur" " - Aucune ne semble décrire ce que vous faites.

Les formats MFC, ATL, etc. seront pris en charge car vous pourrez effectivement compiler votre application sur les futures versions de Visual Studio et les exécuter sur les futures versions de Windows. Mais ils ne sont pas pris en charge dans la mesure où il n’ya pas beaucoup de nouveaux développements dans l’API ou le langage de la même manière que dans le CLR et le C #.

Il n'y a rien de mal avec CLR. Comme d’autres ici, je suggérerais C #, mais comme vous avez des raisons de rester fidèle à C ++, utiliser le framework .NET est plusieurs fois plus simple que de jouer avec ATL / MFC si vous ne les connaissez pas déjà (IMO).

Il vaut la peine de mentionner que si vous utilisez C ++ / CLR, vous n’utilisez pas vraiment C ++. C ++ / CLR se compile dans CIL exactement comme C #. Je ne l'ai jamais utilisé moi-même, mais je pense que son objectif est de vous permettre de compiler du code existant et de le rendre facilement accessible au nouveau code .NET plutôt que de permettre à un nouveau code de fonctionner avec de vieux exécutables C ++. Il existe d’autres méthodes d’appel du code natif à partir de .NET que vous devriez peut-être explorer.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top