Share via


Comment : supprimer la dépendance à _vcclrit.h

Mise à jour : novembre 2007

Dans Visual C++ .NET et Visual C++ 2003, les DLL compilées avec l'option du compilateur /clr pouvaient se bloquer de façon non déterministe lors du chargement. Ce problème est souvent appelé problème de verrouillage du chargeur et est décrit en détail dans Initialisation d'assemblys mixtes.

Pour traiter ce problème, Visual C++ 2003 fournit le fichier _vcclrit.h destiné à vous aider à initialiser des DLL de manière à éviter le verrouillage du chargeur. Pour Visual C++ 2005, l'initialisation est gérée de façon complètement différente afin de réduire considérablement les risques de blocage ; ce fichier d'en-tête n'est donc plus requis.

À des fins de compatibilité descendante, _vcclrit.h est encore inclus et le code qui l'utilise fonctionne toujours, mais le contenu de _vcclrit.h a été désapprouvé. Cette rubrique contient les modifications recommandées nécessaires à la suppression de la dépendance de ce fichier d'en-tête.

Remarque :

Même s'il ne s'agit pas d'une solution idéale, les avertissements de désapprobation résultant de l'utilisation de _vcclrit.h peuvent être supprimés en définissant _CRT_VCCLRIT_NO_DEPRECATE avant d'inclure _vcclrit.h.

Modification des paramètres de l'éditeur de liens

Vous trouverez ci-dessous les modifications à apporter pour supprimer _vcclrit.h des projets qui utilisaient la solution de verrouillage du chargeur recommandée de Visual C++ 2003. Elles impliquent toutes des modifications aux paramètres de l'éditeur de liens. Pour obtenir les instructions relatives à la modification de ces paramètres à l'aide de Visual Studio, consultez Modification des paramètres d'un projet.

  • Supprimez le commutateur /NOENTRY de l'éditeur de liens. Lors de l'utilisation de _vcclrit.h, il était nécessaire de fournir le commutateur /NOENTRY (Aucun point d'entrée) à l'éditeur de liens. Cela n'est plus nécessaire.

  • N'entrez pas explicitement MSVCRT.LIB dans l'éditeur de liens. Comme le commutateur /NOENTRY était requis, il était nécessaire d'effectuer la liaison explicite au fichier bibliothèque du CRT MSVCRT.LIB. Une fois /NOENTRY supprimé, cette bibliothèque est liée par défaut dans sous la compilation /clr.

  • Supprimez NOCHKCLR.OBJ de l'entrée de l'éditeur de liens. Ce fichier n'est plus nécessaire.

  • Supprimez les références forcées aux symboles. Précédemment, il était nécessaire de forcer les symboles suivants avec le commutateur /INCLUDE : __DllMainCRTStartup@12, __crt_dll_initialize et __crt_dll_terminate. Aucun de ces symboles n'est nécessaire dans Visual C++ 2005 ; ils peuvent donc être supprimés sans risque.

Modifications du code

Outre la suppression de #include <_vcclrit.h> de votre code, certaines modifications supplémentaires peuvent être nécessaires selon la nature de votre code. Au minimum, __crt_dll_initialize et __crt_dll_terminate ne sont simplement plus appelés et peuvent par conséquent être supprimés.

Voir aussi

Concepts

Assemblys mixtes (natif et managé)