I. Résumé

On peut dire que cette release améliore notablement le comportement de l'IDE.

Depuis que je l'utilise en production je n'ai plus constaté de gel en ouverture ou fermeture de projet.

Ces blocages étaient provoqués en grande partie par la gestion d'IntelliSense .
Donc ce point de vue c'est une bonne nouvelle l'ide se comporte beaucoup mieux que Visual 2005.

Au niveau C++ pur dans la version commerciale actuelle pas de grandes nouveautés si ce n'est des améliorations côté environnement :

  • Le compilateur prend en charge l'architecture dual core pendant la phase de compilation.
  • Intégration de la gestion du manifest UAC au niveau du projet

Image non disponible

  • Possibilité d'activer la redirection de l'écriture au niveau de la base de registres de la clef HKEY_CLASSES_ROOT vers HKEY_CURRENT_USER automatiquement :

Image non disponible

  • L'option /analyze a été renforcée :
    • Pour rappel, cette option permet de traquer les dépassements de mémoire tampon , le déréférencement du pointeur null , les fuites de mémoire .
      L'autre aspect intéressant est la gestion des annotations permettant d'ajouter des contrôles sur les arguments d'une fonction ou son retour.
    • Exemple : Dans une classe boite de dialogue j'ai une méthode :
 
TéléchargerCacherSélectionnez
    • Je vais rajouter des spécifications pour indiquer que le retour de ma méthode doit être utilisée et que l'argument szPath ne doit pas être nul.
 
TéléchargerCacherSélectionnez
    • L'implémentation de la méthode :
 
TéléchargerCacherSélectionnez
  • [returnvalue:Post( MustCheck=SA_Yes )] requiert que l'appelant vérifie la valeur de retour de GetApplicationFolder
  • [Pre(Null=No)] requiert que l'appelant passe un paramètre non nul pour l'argument szPath.
  • L'utilisation erronée suivante (au sein de la classe):
 
TéléchargerCacherSélectionnez
    • Provoquera les warnings suivants :
 
Sélectionnez
1.
2.
warning C6031: Valeur de retour ignorée : 'CTestDlg::GetApplicationFolder'
warning C6309: L'argument '1' est null : ceci n'est pas conforme à la spécification de fonction de 'CTestDlg::GetApplicationFolder'
    • Il existe d'autres options d'annotations pour contrôler les arguments la documentation est disponible sur MSDN.
  • Le concepteur de classes est désormais pris en charge pour le code C++ natif en lecture seule uniquement.

Image non disponible

II. Nouveautés sur les bibliothèques

Comme je l'ai dit plus haut, coté C++ dans la version actuelle rien de nouveau.

II-A. Coté C++/CLI

C++/CLI continue son évolution avec l'intégration d'une STL/CLR, et surtout l'ajout d'une nouvelle classe marshal_as cette classe permet d'écrire des templates pour simplifier l'écriture de code mixte entre C++ et C++/CLI.

Dans sa version initiale elle permet le marshaling entre chaines de caractères pour le monde natif et managé.

les modes de conversion supportés sont les suivants:

 
TéléchargerCacherSélectionnez

Le plus c'est que l'on peut l'étendre pour nos besoins.

Vous trouverez un exemple d'implémentation sur le blog de Nish

Un blog est dédié à son enrichissement à cette adresse : Marshal-As.NET

II-B. Du coté des MFC

Une importante mise à jour est en cours, je dis en cours parce que non disponible dans le produit de base .

Elle est encore en version beta et téléchargeable sur MSDN

Attention tout de même, celle-ci n'est valable que pour la version anglaise.

Il va donc falloir attendre un petit peu pour disposer de ces nouvelles fonctionnalités.

A l'origine Microsoft a racheté la bibliothèque BCGControlbar , et l'a incluse dans les MFC.

On dispose donc de tout un ensemble de nouvelles classes (une bonne centaine) permettant de donner un look des plus modernes à nos applications.

Voici une liste partielle des possibilités … :

  • Look Office 2007 : barre ruban (ribbon bar) : avec ses différents éléments, statut bar etc…
  • Look Office 2003 (look XP): barre d'outils et de menus au style office, barre de raccourcis selon le style Outlook, aperçu d'impression, sélectionneur de fontes et de couleurs etc.
  • Look Internet Explorer : Rebars et panneaux de taches (Rebars and task panes).
    Look Visual Studio : fonctions d'attachements (docking), fenêtres escamotables (auto hide windows), grilles de propriétés (property grids), onglets MDI, onglets de groupes etc..
  • Support des thèmes vista : avec possibilité de passer d'un thème à l'autre
  • Personnalisation des menus et des barres d'outils par glisser déposer (drag and drop )...
  • Nombre de classes ont été rajoutées pour le Shell …
  • Et encore bien d'autres fonctionnalités.

Pour illustrer la chose j'ai généré sans écrire une ligne de code l'application suivante :

Image non disponible

Concernant cette release un pack de documentation à télécharger est disponible où l'on trouve un guide permettant d'adapter une ancienne application MFC vers les nouvelles classes pour modifier le look.

Je reviendrais sur ces différentes classes dans un autre article.

II-C. Cette mise à jour a eu aussi des effets sur l'environnement

  • Les barres d'outils supportent maintenant les palettes de couleurs 24 bits (enfin !).

Image non disponible

  • La même possibilité est disponible pour les bitmaps (fonctionne sans le pack MFC).

Image non disponible

  • Enfin l'éditeur d'icones permet de visualiser les différents formats avec des palettes plus fines.

Image non disponible

III. Conclusions :

Cette version n'est pas une révolution en ce qui concerne le C++ natif mais une évolution des outils avec un éditeur qui se comporte beaucoup mieux que Visual 2005.

Pour les MFC, le pack de mise à jour donne un second souffle aux applications, et vu le niveau de possibilité donné à l'interface cela va peut être donner un regain d'intérêt pour cette plateforme de développement.

Néanmoins j'exprime quelques regrets :

  • Quand allons nous enfin pouvoir gérer la couleur et soyons fous un fond pour une forme/dialogue directement dans l'éditeur de ressource ? Il me semble que vu le nombre de modifications apportées à la bibliothèque MFC cette modification n'aurait pas été de trop. Une simple classe dérivée de CFormView ou de CDialog nous aurait suffit…
  • Je ne peux m'empêcher de faire la même remarque au niveau des contrôles.
  • Sera-t-il possible un jour de proposer des extensions de classe de base ? Il n'est pas interdit de rêver non ? Ca serait vraiment génial, je pense par exemple à la classe CTabCtrl qui est particulièrement imbuvable.
  • Coté C++/CLI : Pourquoi ne peut-on pas construire de projet pocket PC avec ce langage ? C'est vraiment dommage, je ne comprends pas ce choix.