VS2012 C++ warning C4005: '__useHeader': makro-Neudefinition
Während der Migration einer alten C++ - Projekt von Visual Studio 6 auf Visual Studio 2012, stießen wir auf eine merkwürdige Reihe von Warnungen aus dem inneren des standard-Microsoft-Plattform Header:
- warning C4005: '__useHeader' : makro-Neudefinition
- warning C4005: '__auf_failure' : makro-Neudefinition
Eine online-Suche findet man nur ein paar andere Menschen, die in diese Fehlermeldung. In einigen Fällen war es Menschen, die versuchen zu verwenden, VS2012 zu kompilieren älteren DirectX-code - das Tue ich nicht. In anderen Fällen war es Menschen, die versuchen zu verwenden, VS2012 zum Ziel Windows XP (mit der neuen option von Update 1) - das Tue ich.
Die DirectX Frage wurde geantwortet, dass die Warnung wird immer da sein, um Ihnen zu sagen, dass Sie die Kompilierung mit einer out-of-date (pre-Win8) DirectX-version, und Sie müssen nur damit zu Leben.
Windows XP Frage nicht beantwortet wurde. Anderen Leuten einfach gesagt, Sie könnten das problem nicht reproduzieren.
Ich es kopiert, und fand die Ursache, die ich Schreibe hier, um zu helfen, jemand anderes, der dies trifft auf.
InformationsquelleAutor der Frage Jeff B | 2013-01-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Geh in die Projekteigenschaften und die "Preprocessor Definitions" - Feld.
Zusätzlich zu den Standard-und zusätzlichen definition der Konstanten, Sie sollten sehen, ein makro:
Dieses makro anscheinend bringt einige zusätzliche compiler-zur Verfügung gestellt Präprozessor-Definitionen. Ich bin nicht sicher, welche version von Visual Studio vorgestellt, dieses makro, aber es war nicht da in Visual Studio 6.
In Visual Studio 2012, dieses makro ist erforderlich werden in Ihrem Projekt vorhanden ist, Präprozessor-Definitionen-Feld. Es kann auch erforderlich sein, die in früheren Versionen von Visual Studio, aber ich habe es nicht getestet diese.
Wenn dieses makro fehlt, Sie sehen die Fehlermeldungen wie oben gezeigt.
InformationsquelleAutor der Antwort Jeff B
UPDATE:
Sehen Edmund's Antwort auf die gleiche Frage ersten -- probieren. Wenn es funktioniert, Super!!! Wenn nicht... versuchen Sie Folgendes:
ORIGINAL:
Verwenden Sie die Problemumgehung erwähnt, auf die "Workarounds" - Reiter von dieser web-Seite:
http://connect.microsoft.com/VisualStudio/feedback/details/789965/resource-editor-warning-rc4005-on-toolset-visual-studio-2012-windows-xp-v110-xp
Nämlich, hinzufügen:
...direkt in die .rc-Datei vor es umfasst alles, was auch die system-Headern, die diese Warnung verursacht.
InformationsquelleAutor der Antwort DLRdave
Nicht gefunden haben, eine Lösung für diese Veröffentlichung überall online, also hier ist was für mich gearbeitet.
Ich Baue ein Projekt mit 110_xp tools
Bekomme ich diese Warnungen ...
Eindeutig ein Widerspruch zwischen der VC-11 Kopf-und 7.1-sdk-Header.
In meinem stdafx.cpp ich Tat dies ...
... das build-problem ist Weg.
InformationsquelleAutor der Antwort softwarebear
Dies ist eine Ressource compiler-Warnung. Die Lösung ist einfach. Klicken Sie rechts auf die .rc-Datei im Projektmappen-explorer und wählen Sie "Eigenschaften". Gehen Sie jetzt zu Ressourcen > Allgemeine > Präprozessor-Definitionen, und fügen Sie
InformationsquelleAutor der Antwort Edmund
Hinzufügen
#define _USING_V110_SDK71_
im Stdafx.cpp oder Stdafx.h würde nicht funktionieren, wenn Ihre cpp-Dateien haben nicht die vorkompilierte Header.Um dieses problem zu lösen, werden die folgenden Werke.
Rechten Maustaste im Projektmappen-Explorer* → Eigenschaften → C/C++ → Präprozessor → Präprozessor-definition → Bearbeiten → Hinzufügen _USING_V110_SDK71_
InformationsquelleAutor der Antwort Tae-Sung Shin
Für mich eine andere Lösung gearbeitet.
Im Projekt Eigenschaften → Konfiguration Eigenschaften → C/C++ → Allgemeinenänderte ich das Feld Neben der Include-Verzeichnisse Pfad zum SDK mit diesem makro:
Davor, dieses Feld hatte den Weg zu meinem SDK v7.1, und ich hatte die gleichen Warnungen.
InformationsquelleAutor der Antwort Dorin
Ist es noch einfacher.
Aktivieren Sie einfach das Kontrollkästchen "Inherit from parent oder project defaults" in Konfiguration Eigenschaften → C/C++ → Präprozessor /Präprozessor-Definitionen → Bearbeiten.
InformationsquelleAutor der Antwort Pekka
Für mich dies geschah mit Visual Studio 2017 (frisch repariert und installation). Offensichtlich ist die Windows SDK 7.1 installiert war bevor VS2017 und war integriert in eine Visual Studio 2005-installation.
In meinem Fall die beiden files:
%LOCALAPPDATA%\Microsoft\MSBuild\v4.0\Microsoft.Cpp.Win32.user.props
%LOCALAPPDATA%\Microsoft\MSBuild\v4.0\Microsoft.Cpp.x64.user.props
enthaltenen Verweise auf die include-Verzeichnisse und Bibliotheken der Windows 7.1 SDK. Das entfernen dieser Verweise hat den job.
Beachten Sie, dass jedes einzelne C++ - Projekt für Win32 und x64 jeweils erbt diese Eigenschaft Blatt.
InformationsquelleAutor der Antwort 0xC0000022L
Ich hatte dieses problem in einige Projekte, die ursprünglich mit VC++ 2003 und wurden inkrementell aktualisiert über die Jahre. Ich fand, dass, während das Projekt-Einstellungen hatte
%(PreprocessorDefinitions)
im Präprozessor-Definitionen, ein paar der .cpp Dateien nicht (Die ältesten). Nach dem ändern Sie auf "Berechtigungen übergeordneter Objekte oder project defaults" er entledigte sich die Warnungen.InformationsquelleAutor der Antwort Reed Hedges
Obwohl diese Antwort ist für VS10, es ist von Interesse, da möglicherweise bieten einige Hinweise darauf, was Los ist, nämlich der VC++ - Verzeichnisse-Makros:
Die Warnung erschien, wenn diese Anweisungen wurden Hinzugefügt, die in der header-Datei eines Projektes, Anwendung:
Warnungen wie die folgende aufgetaucht ist, für alle, aber die XPSP3 def.:
MyApp war ein WinDebug 32 bauen, in Anbetracht Windows7.1SDK erschien in der X64-Abschnitt der proj-Datei:
Den geerbten Wert für Präprozessor-Definitionen wurde _VC80_UPGRADE=0x0600. Unter Verwendung der SDK-toolset vor Rückgriff auf V100, die SDK-Bibliotheken wurden als inherited_from in Include-Verzeichnisse und Bibliothek Verzeichnisse in der VC++ - Verzeichnisse Abschnitt, wie bereits hier.
Sieht aus wie die Warnung wird erzeugt, als ein Ergebnis einer Kombination von Upgrade -, Migrations -, oder toolset-änderungen.
Bearbeiten: Ein anderes Problem in VS2017 (MBCS) ist die Verwendung von
anstelle der Standard -
LoadCursorA(...)
im WNDCLASSEXW Struktur. Eine mögliche Lösung ist, neu zu definieren, etwa so:Hier die Warnung kann unterdrückt werden, indem die
#undef
procedure vor der#define
:InformationsquelleAutor der Antwort Laurie Stearn