2008-10-28 8 views
5

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?

+0

Réinitialisation de VC++ à VisualC++, en essayant de standardiser SO sur une étiquette ... – Aardvark

+0

'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

Répondre

8

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;)

-1

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.

+1

Et ma réponse est mauvaise ... comment? C'est fondamentalement la même chose que la moitié des autres réponses. –

2

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.

0

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)

1

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.

0

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.

2

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.

Questions connexes