Durante la migrazione di un vecchio progetto C++ da Visual Studio 6 fino a Visual Studio 2012, ci siamo imbattuti in un set dispari di avvertimenti da dentro la piattaforma Microsoft intestazioni standard:VS2012 C++ C4005 avviso: '__useHeader': macro ridefinizione
- avvertimento C4005: '__useHeader': macro ridefinizione
- avvertimento C4005: '__on_failure': macro ridefinizione
una ricerca online trovato solo poche altre persone in esecuzione in questo errore. In alcuni casi, era gente che cercava di usare VS2012 per compilare il codice DirectX legacy, cosa che non sto facendo. In altri casi, erano le persone che tentavano di utilizzare VS2012 per scegliere come target Windows XP (utilizzando la nuova opzione dell'aggiornamento 1), cosa che sto facendo.
Alla domanda DirectX è stato risposto che l'avviso sarà sempre lì per dirti che stai compilando una versione obsoleta (pre-Win8) di DirectX, e devi solo conviverci .
La domanda di Windows XP non ha avuto risposta. Altre persone hanno semplicemente detto che non potevano riprodurre il problema.
L'ho riprodotto e ho trovato la causa, che sto scrivendo qui per aiutare chiunque altro incontri questo.
Questa macro viene aggiunta alla migrazione da VS2005 a VS2012 per impostazione predefinita e non è stata utile nel mio caso. Una volta, ho cambiato la directory include SDK da v7.1A a '$ (WindowsSDK_IncludePath)' che è la versione 8.0 tutti gli avvisi sono andati. – alex555
Ho% (PreprocessorDefinitions) e ricevo comunque gli avvisi.La soluzione con $ (WindowsSDK_IncludePath) ha funzionato per me. –
Ciò può verificarsi anche quando i singoli file di origine hanno definizioni di preprocessore che sovrascrivono le definizioni del progetto. –