Y a-t-il quelque chose que je devrais savoir avant de convertir un grand programme C++ de VS2005 en VS2008?Tout ce que je devrais savoir avant de convertir un grand programme C++ de VS2005 en VS2008?
Répondre
Je travaille sur ce problème très en ce moment.
Courir Winmerge pour voir ce que j'ai changé ...
OK, voici ce que je devais corriger dans une grande application client Win32/MFC:
Certaines fonctions MFC sont devenus virtuels (qui n'étaient pas dans le passé - CWnd :: GetMenu pour un, si je me souviens bien). En outre, quelque chose lié à notre support de la molette de la souris (avant que Windows ne dispose d'un support de molette de souris intégré) s'est cassé (j'ai juste enlevé la fonction, donc je n'ai jamais vraiment compris pourquoi ça a cassé).
Certaines méthodes ATL (ou paramètres de méthode) ont changé en const qui n'étaient pas à l'origine (vissé mes remplacements). Le SDK de la plate-forme est plus récent - soyez prudent si vous définissez la version #defines de Windows SDK correctement (nous n'étions pas dans tous les endroits - ce qui était stupide). Vous pouvez maintenant construire avec des versions plus récentes (Vista/2008) des structures Win32. Cela n'a pas fonctionné si bien sur ma boîte XP. STDMETHOD inclut maintenant __declspec (nothrow) qui a 100% de droit - sauf que cela a causé quelques problèmes dans notre code. Une interface qui a été écrite comme elle serait exposée à travers COM, mais n'a jamais été, a jeté des exceptions.
L'IDE a un bug où des points d'arrêt handicapés ne montrent pas le cercle creux dans la marge si vous n'avez pas les points de rupture définis pour mettre en évidence toute la ligne (que je pense est la valeur par défaut pour VC++, peut-être ?).
La plupart de ces problèmes étaient dus à des erreurs subtiles dans notre code ou à une surcharge agressive des bibliothèques MFC/ATL. Puisque le code de tout le monde est parfait, ça devrait aller;)
Y a-t-il une différence dans la syntaxe que vous ne pouvez pas simplement recompiler? VS convertira les fichiers .sln et vcproj automatiquement pour vous. Le reste n'est que du code, et à moins que vous ne fassiez quelque chose de vraiment étrange, il devrait juste recompiler tel quel.
Et ma réponse est mauvaise ... comment? C'est fondamentalement la même chose que la moitié des autres réponses. –
Lors de mon travail, nous avons converti un grand projet C++ de VS2005 à VS2008. Il n'y avait pas de problèmes du tout. Inutile de dire que vous devriez certainement garder une copie de l'ancien projet au cas où. :)
Éditer: J'aurais dû mentionner que le projet est conçu pour être indépendant de la plate-forme, et n'a pas de composants graphiques.
J'ai récemment converti un projet écrit en utilisant VC++ 5, que je n'avais pas touché depuis 10 ans à VS2008. J'ai juste chargé le projet et laissé VS2008 le convertir. Tout s'est bien passé. (projet maintenant ici: http://www.codeplex.com/Uptime)
Si votre projet utilise MFC, vous devez savoir qu'il a subi une mise à jour assez importante en 2008, ce qui pourrait casser des choses. Surtout la sécurité et les mises à jour de l'interface utilisateur, ce qui vaut la peine de le faire de toute façon à mon avis.
Voir here pour plus d'informations générales sur ce qui a changé dans VS 2008.
D'après notre expérience, les projets se transforment très bien. Le seul changement de code que nous avons rencontré était où _MIN et _MAX ont été supprimés - nous avons dû le changer en std :: min(), etc.Nos trucs MFC compilés OK. Notre plus gros casse-tête a été d'obtenir les versions VS 2008 des bibliothèques tierces que nous avons achetées, et de construire des versions VS 2008 de grands paquets open source comme boost, OpenSceneGraph et GDAL. Pas de science de fusée - juste un peu ennuyeux. J'ai écrit un court résumé on my blog.
Si vous devez supporter des plates-formes plus anciennes, méfiez-vous: VC2008 est la première version que can't target Win9x or NT4. Mon entreprise doit s'en tenir à VC2005 pour cette raison.
- 1. Que devrais-je savoir sur le comportement antisocial de l'utilisateur?
- 2. Que devrais-je savoir sur le développement d'applications 64 bits?
- 3. VS2008 binaire 3 fois plus lent que VS2005?
- 4. Comment est-ce que je divise un grand fichier en unix de façon répétée?
- 5. Assertion dans VS2008 mais pas dans VS2005
- 6. Est-ce que je déborde de la mémoire flash de mon AVR avec un programme trop grand?
- 7. Bibliothèques C++ non gérées - différences entre VS2005 et VS2008?
- 8. devrais-je appeler lckpwdf() avant getspent()?
- 9. Est-ce que le programme Extensible en C est possible?
- 10. Que devrais-je savoir lors du passage de l'assemblage MIPS à l'assemblage x86?
- 11. Quelle connaissance en C# devrais-je avoir?
- 12. Est-ce que SqlDataReader stocke tout en tant que chaîne?
- 13. Est-ce que je devrais stocker en tant que "chaînes" ou "entiers" en php et mysql?
- 14. Est-ce que Team Explorer s'intègre avec VS2005
- 15. Est-ce que commence? . . fin tout en dénotant un «bloc»?
- 16. Comment savoir ce que mach_msg_trap attend?
- 17. problème: globalisation en C# utilisant VS2005
- 18. Comment est-ce que je devrais refactoriser une longue chaîne d'opérations de moulage spéculatives enveloppées d'essai
- 19. C# Aide convertir ce code de VB.NET en C#
- 20. comment puis-je convertir ce lien href en un bouton? Comment puis-je convertir ce code en un bouton?
- 21. Comment terminer un tableau de caractères avant de convertir en une chaîne en Java
- 22. Est-ce que la syntaxe Sql2008 MERGE est ce que je devrais faire, ici?
- 23. Combien d'intellisense devrais-je attendre pour jquery dans VS2008?
- 24. Est-ce que je devrais programmer en même temps qu'un webdeveloper si je ne suis pas un webdeveloper?
- 25. Débutant a besoin de savoir comment analyser un groupe de texte tout comme ce
- 26. Pour les développeurs C++, cela vaut-il la peine de passer de VS2005 à VS2008?
- 27. Que devez-vous savoir avant de pouvoir obtenir un emploi Rails d'entrée de gamme?
- 28. Devrais-je utiliser l'adhésion pour ce système de compte inhabituel
- 29. git pull continue de supprimer tout ce que j'ai ajouté
- 30. Que devrais-je utiliser à la place de sscanf?
Réinitialisation de VC++ à VisualC++, en essayant de standardiser SO sur une étiquette ... – Aardvark
'VS2005' inclut Windows SDK ** 5.0 **,' VS2008' inclut Windows SDK ** 6.0 **. Voir ["Différences entre les versions de Windows SDK 5.0 et 6.0"] (http://linuxtesting.org/compatibility/Windows_SDK_5.0_to_Windows_SDK_6.0/x86/abi_compat_report.html) pour une comparaison détaillée. – aponomarenko