Comment puis-je décider D'utiliser ATL, MFC, Win32 ou CLR pour un nouveau projet C++?
je commence juste mon premier projet C++. J'utilise Visual Studio 2008 . C'est une application Windows simple qui accède à quelques bases de données et initie une transaction WebSphere MQ. Je comprends fondamentalement les différences entre ATL, MFC, Win32 (je suis un peu flou sur celui-là en fait) et CLR, mais je suis à une perte quant à la façon dont je devrais choisir.
y en a-t-il un ou plusieurs pour la rétrocompatibilité?
Est CLR une mauvaise idée ?
toute suggestion est appréciée.
Edit: J'ai choisi C++ pour ce projet pour des raisons que je n'ai pas mentionnées dans le post, qui ne sont pas entièrement techniques. Donc, suppose C++ est la seule / meilleure option, que dois-je choisir?
5 réponses
Cela dépend de vos besoins.
utiliser le CLR vous fournira l'ensemble de bibliothèques le plus expressif (l'ensemble du framework .NET), au prix de restreindre votre exécutable à l'obligation D'installer le framework .net à l'exécution, ainsi que de vous limiter à la plate-forme Windows (cependant, les 4 technologies listées sont windows uniquement, de sorte que la limitation de la plate-forme est probablement la moins gênante).
cependant, CLR exige que vous utilisiez les extensions C++ / CLI vers le langage C++, donc vous aurez, dans essense, besoin d'apprendre quelques fonctionnalités supplémentaires pour utiliser ceci. Cela vous donne de nombreux "extras", tels que l'accès aux bibliothèques.net, la collecte complète des ordures, etc.
ATL & MFC sont un peu plus difficile de décider entre les deux. Je vous renvoie à la page de MSDN pour choisir afin de décider entre eux. Ce qui est bien avec ATL/MFC, C'est que vous n'avez pas besoin du framework .NET, seulement du Temps D'exécution VC/MFC à installer pour le déploiement.
utilisant Win32 fournit directement les plus petits exécutables, avec le moins de dépendances, mais est plus de travail à écrire. Vous avez le moins de bibliothèques d'aide, donc vous écrivez Plus de code.
Win32 est le brut, nu-métal façon de faire. C'est pénible, difficile à utiliser, et a beaucoup de petits détails que vous devez retenir, sinon les choses vont échouer à relativement mystérieuses.
MFC construit sur Win32 pour vous fournir une façon orientée objet de construire votre application. Ce n'est pas un remplacement pour Win32, mais plutôt à améliorer - c'est beaucoup de travail dur pour vous.
Système.Windows.Formes (ce qui est ce que je suppose que vous CLR) est complètement différent, mais présente de grandes similitudes avec le CFM par rapport à sa structure de base. Il est de loin le plus facile à utiliser, mais nécessite le .net framework, qui peut ou non être un obstacle dans votre cas.
ma recommandation: Si vous devez éviter .NET, alors 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++, j'utiliserais WTL. Il est léger et vous aurez peu de dépendances (s'il y en a), ce qui le rendra facile à expédier et à installer. Je trouve cela très satisfaisant lorsque mon application se compose d'une seule EXE qui fonctionnera sur la plupart des versions de Windows, mais cela ne peut pas être un problème pour vous.
si vous choisissez D'aller .NET à la place, alors C# est presque certainement la voie à suivre.
plus dans WTL ici:
je serais très curieux de savoir pourquoi vous voulez faire cela en C++. D'après votre brève description, C# semble être un choix beaucoup plus approprié.
juste pour développer un peu, regardez le lien que vous avez donné décrivant le C++ CLR. La réponse la mieux cotée note (avec précision, à mon avis) que C++ est approprié pour "le noyau, les jeux, la haute performance et les applications de serveur"-dont aucun ne semble décrire ce que vous faites.
MFC, ATL, etc sont va être pris en charge dans le sens où, oui, vous serez en mesure de compiler votre application sur les versions futures de Visual Studio et de les exécuter sur les versions futures de Windows. Mais ils ne sont pas pris en charge dans le sens où il n'y a pas beaucoup de nouveaux développements en cours dans L'API ou le langage de la même façon qu'il y en a dans le CLR et le C#.
il n'y a rien de mal à CLR. Comme d'autres ici je suggérerais C# mais comme vous avez des raisons de rester avec C++ alors utiliser le framework .NET est plusieurs milliers de fois plus facile que de jouer avec ATL/MFC si vous n'êtes pas déjà familier avec eux (IMO).
il peut être intéressant de mentionner que si vous utilisez C++/CLR alors vous n'utilisez pas vraiment C++. C++ / CLR compile vers CIL comme C#. Je ne l'ai jamais utilisé moi-même mais je crois que son but est de vous permettre de compilez le code ancien et mettez-le facilement à la disposition du nouveau code .NET plutôt que de permettre au nouveau code de fonctionner avec les anciens exécutables C++. Il existe d'autres méthodes pour appeler du code natif à partir de .NET que vous devriez peut-être Explorer.