Les applications C++ utilisent le contrôle STRICT des types

De RAD Studio
Aller à : navigation, rechercher

Remonter à Spécificités du C++ - Index


Le schéma de contrôle par défaut des types pour les nouvelles applications C++ est STRICT, comme si vous aviez défini #define STRICT (cela s'applique aux applications Windows 64 bits et 32 bits). Les applications créées avant C++Builder 2007 utilisent toujours la valeur par défaut, #define NO_STRICT. La VCL substantype maintenant les paramètres de handle Windows pour correspondre au schéma de substantypage C++ STRICT, et la compilation en mode STRICT a les avantages de fournir une sécurité des types améliorée et d'établir la correspondance avec le substantypage natif de la VCL.

Migration de votre code depuis NO_STRICT

Il est recommandé de mettre à niveau les applications qui définissent NO_STRICT, afin qu'elles soient compilées en mode STRICT (la première étape est le retrait de la définition conditionnelle NO_STRICT, comme décrit dans cette rubrique). Toutefois, la VCL fournit toujours des points d'entrée pour les applications qui définissent NO_STRICT. Si votre code ne se compile pas en mode STRICT, vous pouvez continuer à utiliser NO_STRICT. Soyez conscient que ceci peut changer à l'avenir.

Comment savoir si une application utilise NO_STRICT

Une façon rapide de trouver des projets de code pour lesquels NO_STRICT a été défini, consiste à rechercher NO_STRICT dans vos fichiers *.cbproj.

Remarque : Les fichiers projet C++Builder (fichiers .cbproj) ne peuvent pas être affichés ou modifiés dans l'éditeur de code, et ne doivent pas être modifiés dans un autre éditeur, mais vous pouvez effectuer une recherche dans un fichier .cbproj en utilisant un autre éditeur ou un utilitaire de recherche. Par exemple, vous pouvez utiliser GREP.

Pour des projets spécifiques, vous pouvez utiliser l'EDI pour retirer la définition NO_STRICT, comme décrit dans les étapes suivantes.

Retrait de la définition conditionnelle NO_STRICT

  1. Ouvrez un projet avec NO_STRICT défini.
  2. Sélectionnez Projet > Options > C++ (options partagées) (c'est la page supérieure de la boîte de dialogue Options de projet).
  3. Dans le champ Config de construction en haut de la page, sélectionnez la configuration devant utiliser la définition conditionnelle STRICT (telle que la configuration Base).

    Remarque : Si le champ Définitions conditionnelles contient "Hériter les valeurs de <nom_configuration>", vous devez sélectionner la configuration parent nommée (indiquée dans <nom_configuration>) dans le champ Config de construction.

  4. Dans le champ Définitions conditionnelles, mettez en surbrillance NO_STRICT et supprimez-le.
  5. Cliquez sur OK sur la boîte de dialogue Définitions conditionnelles.
  6. Cliquez sur OK sur la boîte de dialogue Options de projet.
  7. Reconstruisez votre projet et corrigez les erreurs qui apparaissent en tant que résultat du contrôle des types, plus particulièrement dans les appels aux procédures Windows.

Ajout de la définition STRICT (facultatif)

Le retrait de la définition conditionnelle NO_STRICT est équivalent à la définition conditionnelle STRICT car STRICT est la valeur par défaut. Toutefois, vous pouvez facultativement ajouter la définition conditionnelle STRICT en suivant ces étapes :

  1. Sélectionnez Projet > Options > C++ (options partagées) (c'est la page supérieure de la boîte de dialogue Options de projet).
  2. Dans le champ Config de construction en haut de la page, sélectionnez la configuration devant utiliser la définition conditionnelle STRICT (telle que la configuration Base).

    Remarque : Si le champ Définitions conditionnelles contient "Hériter les valeurs de <nom_configuration>", vous devez sélectionner la configuration parent nommée (indiquée dans <nom_configuration>) dans le champ Config de construction.

  3. Dans le champ Définitions conditionnelles, cliquez sur le bouton Points de suspension.
  4. Sur la boîte de dialogue Définitions conditionnelles, entrez STRICT dans le champ de saisie de texte, et cliquez sur Ajouter.
  5. Cliquez sur OK sur la boîte de dialogue Définitions conditionnelles.
  6. Cliquez sur OK sur la boîte de dialogue Options de projet.
  7. Reconstruisez votre projet et corrigez les erreurs qui apparaissent en tant que résultat du contrôle des types, plus particulièrement dans les appels aux procédures Windows.

Problèmes de contrôle des types utilisant les anciens types Windows

Avant Windows 3.1, les types Windows, tels que HWND et HMENUS, étaient de type void *. Ceci signifiait qu'une procédure Windows pouvait être appelée avec un HWND ou un HMENUS en tant que paramètre, et Windows ne pouvait les distinguer. Avec l'introduction de Windows 3.1, beaucoup de ces types ont été changés en types distincts. Windows peut maintenant déterminer si vous appelez avec le mauvais type.

Cette modification enlève une tâche énorme aux développeurs d'anciennes applications : changer les types des paramètres utilisés dans ces appels de procédures Windows. La définition conditionnelle NO_STRICT allège cette conversion. Avec NO_STRICT défini, la VCL fournit des points d'entrée aux surcharges des procédures Windows qui acceptent les anciens types de paramètres et effectuent la conversion.