2015-01-21 2 views
10

Ho un progetto C++ che fa riferimento a molti altri progetti/librerie. Questo è per un'applicazione che è stata creata molti anni fa. Circa ogni una volta all'anno viene aggiornato e viene eseguita una nuova versione. Ho usato Visual Studio 6 per aggiornare e creare nuove versioni di questa app per anni senza problemi.MFC non supporta WINVER inferiore a 0x0501

Sto provando a passare a Visual Studio 10 (e ora VS2013). Inizialmente mi sono imbattuto in numerosi avvisi ed errori dovuti a problemi di compatibilità tra le versioni VS. Sono stato in grado di prendermi cura di più. Comunque, sto ancora un po 'confuso da seguente errore:

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'errore si verifica in alcune delle librerie di progetto di riferimento. Ho controllato le librerie del progetto in questione e non trovo alcun riferimento a WINVER.

Ho cercato su internet per informazioni su questo e ho trovato alcuni argomenti ma nulla che è specifico per il mio problema. Qualcuno può far luce su ciò che potrebbe accadere qui?

Grazie in anticipo. LA

+0

Se si utilizza 'stdafx.h', è possibile aggiungere' #define WINVER 0x0501' nella parte superiore del file. – wimh

risposta

22

Tutte le app MFC definiscono il valore della macro WINVER da qualche parte se non è stato definito dall'utente. Presumo che MS abbia rimosso la definizione per impostazione predefinita sui propri file di intestazione e ora sta rendendo obbligatorio definirlo esplicitamente.

Quindi, per risolvere il problema, inserisci lo #define nelle opzioni del compilatore "preprocessore" o nella parte superiore dell'intestazione precompilata (ad esempio stdafx.h).

Nota 0x501 è il supporto di Windows XP. 0x600 è Vista, 0x601 è Windows 7 - e quanto sono triste per averlo ricordato!

+4

Ho avuto un problema simile, e nessuna quantità di '# define' l'ha risolto. Risulta, in Visual Studio 2013, se si fa clic con il tasto destro sul progetto, selezionare Proprietà, quindi nelle opzioni 'Proprietà di configurazione -> C/C++ -> Tutte le opzioni', c'era un'/DWINVER' lì. – thejinx0r

+0

@ thejinx0r Che può essere applicato a tutte le versioni di VS, l'impostazione definisce nelle opzioni del compilatore non è una novità, basta vedere qualsiasi makefile. – gbjbaanb

+0

@gibnab Sono completamente d'accordo con la tua affermazione. Volevo solo dire che i '# define's sono a volte sepolti nelle opzioni da qualche parte che non ti aspettavi. Inoltre, '#define WINVER's nel codice non ha generato alcun errore di ridefinizione – thejinx0r

4

ho ottenuto lo stesso errore, su Windows 7 con Visual Studio 2013.

Nel mio caso il mio progetto ha avuto un file di origine con il nome stdafx.h, all'interno di quel file c'era

#ifndef _WIN32_WINNT 
#define _WIN32_WINNT 0x0500 
#endif 

ho cambiato a

#ifndef _WIN32_WINNT 
#define _WIN32_WINNT 0x601 
#endif 

e l'errore è scomparso.

-1

ho ottenuto lo stesso errore, il WIN 7 VS 2013. Nel mio caso il mio progetto ha avuto un file di origine con il nome stdafx.h, all'interno di quel file c'era

#ifndef WINVER 
#define WINVER 0x0400 
#endif 

ho cambiato in

#ifndef WINVER 
#define WINVER 0x601 
#endif 

e l'errore è scomparso.

+0

Questo è praticamente un copia-e-incolla della risposta di @Alessandro Jacopson con alcuni caratteri modificati. –