web-dev-qa-db-fra.com

MFC ne prend pas en charge WINVER inférieur à 0x0501

J'ai un projet C++ qui référence de nombreux autres projets/bibliothèques. Il s'agit d'une application créée il y a de nombreuses années. Environ une fois par an, il est mis à jour et une nouvelle version est effectuée. J'ai utilisé Visual Studio 6 pour mettre à jour et créer de nouvelles versions de cette application depuis des années sans aucun problème.

J'essaie de passer à Visual Studio 10 (et maintenant VS2013). Au début, j'ai rencontré plusieurs avertissements et erreurs dus à des problèmes de compatibilité entre les versions VS. J'ai pu m'occuper de la plupart. Cependant, je suis toujours quelque peu confus par l'erreur suivante:

error C1189: #error : MFC does not support WINVER less than 0x0501. Please change the definition of WINVER in your project properties or precompiled header. C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\atlmfc\include\afxv_w32.h

L'erreur se produit dans quelques-unes des bibliothèques de projets référencées. J'ai vérifié les bibliothèques de projet en question et je ne trouve aucune référence à WINVER.

J'ai cherché sur Internet des informations à ce sujet et j'ai trouvé des sujets mais rien de spécifique à mon problème. Quelqu'un peut-il faire la lumière sur ce qui pourrait se passer ici?

Merci d'avance. LA

16
user3242337

Toutes les applications MFC définissent la valeur de la macro WINVER quelque part si vous ne l'avez pas définie vous-même. Je suppose que MS a supprimé la définition par défaut sur ses propres fichiers d'en-tête et rend maintenant obligatoire que vous la définissiez explicitement.

Donc, pour résoudre votre problème, mettez le #define dans vos options de compilateur "préprocesseur", ou en haut de votre en-tête précompilé (c'est-à-dire stdafx.h).

Remarque 0x501 est Windows XP support. 0x600 est Vista, 0x601 est Windows 7 - et combien je suis triste de m'en souvenir!

30
gbjbaanb

J'ai eu la même erreur, sur Windows 7 avec Visual Studio 2013.

Dans mon cas, mon projet avait un fichier source avec le nom stdafx.h, à l'intérieur de ce fichier, il y avait

#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x0500
#endif

Je l'ai changé en

#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x601
#endif

et l'erreur a disparu.

10

Par défaut, WINVER est défini comme 0x0500 dans le préprocesseur. Pour surmonter cette erreur, supprimez la version win définie "WINVER = 0x0500" des propriétés de configuration => c/c ++ => onglet Préprocesseur et reconstruisez.

Ou vous pouvez fournir une version WIN plus élevée en tant que #define _WIN32_WINNT 0x601 dans votre code où que vous obteniez une erreur.

1
Yogesh Dangre