Question

Je suis sous Windows 7 et j'utilise Visual Studio 2012.

Lorsque je compile, je reçois de nombreux avertissements de redéfinition de macro provoqués par winerror.h par rapport à dxgi.h, dxgitype.h, d3d11.h, d3d10.h ;par exemple DXGI_STATUS_OCCLUDED, DXGI_STATUS_CLIPPED, DXGI_STATUS_NO_REDIRECTION etc.

Je suppose que c'est parce que le SDK Windows 8 est installé.Comment puis-je éviter ça?Existe-t-il un moyen d'exclure ces nouvelles bibliothèques de mon projet ?

Était-ce utile?

La solution

J'ai couru dans ce problème à l'aide de Visual Studio 2012 Express sur Windows 8; Cependant, mes erreurs étaient presque exactement les mêmes, et le correctif est centré sur le SDK Windows. Ceci était dans MSDN (Voir # 5) :

D3DX n'est pas considéré comme l'API canonique pour utiliser Direct3D sous Windows 8 et n'est donc pas incluse avec le SDK Windows correspondant. Enquêter sur les solutions alternatives pour travailler avec l'API Direct3D.

Pour les projets hérités, tels que les échantillons SDK Windows 7 (et antérieurs) DirectX SDK, les étapes suivantes sont nécessaires pour créer des applications avec D3DX à l'aide de DirectX SDK:

a. Modifiez les répertoires VC ++ du projet comme suit pour utiliser le bon ordre pour les en-têtes et les bibliothèques SDK.

  1. Ouvrez les propriétés du projet et sélectionnez la page Répertoires VC ++.
  2. Sélectionnez toutes les configurations et toutes les plates-formes.
  3. Définissez ces répertoires comme suit:

    • Inclure les annuaires: $ (includepath); $ (dxsdk_dir) include
    • Répertoires de la bibliothèque: $ (LibraryPath); $ (DXSDK_DIR) LIB \ X86
    • Cliquez sur Appliquer.
    • Choisissez la plate-forme X64.
    • Définissez le répertoire de la bibliothèque comme suit:

Autres conseils

J'ai rencontré ce problème lors de la compilation de SlimDX avec Visual Studios 2012 sous Windows 8.Les inclusions du SDK Windows sont héritées par défaut afin qu'elles se chargent après que les répertoires d'inclusion du projet soient définis manuellement.Pour résoudre ce problème, ajoutez le SDK Windows comme premier répertoire d'inclusion. $(WindowsSDK_IncludePath)

(yay, ma première réponse sur Stackoverflow)

Trouvé A, espérons-le bien, de contournement sur la question: faites votre propre fichier d'en-tête, qui inclut Windows.h (D3D11 inclut que de toute façon), n'enseigne que Windows Macros et comprend D3D11.h.Inclure cet en-tête au lieu de D3D11.h. Remarque: De toute évidence, cela hiérarchise les versions de la définition D3D11, sur ceux de Windows.H

// D3D11-NoRedefs.h
// Includes D3D11.h without redefinitions from Windows!
#pragma once

#include <Windows.h>

#pragma region Undefine Windows Macros
// Only undefine, if DXGIType.h has not been included yet
    #ifndef __dxgitype_h__
        #undef DXGI_STATUS_OCCLUDED
        #undef DXGI_STATUS_CLIPPED
        #undef DXGI_STATUS_NO_REDIRECTION
        #undef DXGI_STATUS_NO_DESKTOP_ACCESS
        #undef DXGI_STATUS_GRAPHICS_VIDPN_SOURCE_IN_USE
        #undef DXGI_STATUS_MODE_CHANGED
        #undef DXGI_STATUS_MODE_CHANGE_IN_PROGRESS
        #undef DXGI_ERROR_INVALID_CALL
        #undef DXGI_ERROR_NOT_FOUND
        #undef DXGI_ERROR_MORE_DATA
        #undef DXGI_ERROR_UNSUPPORTED
        #undef DXGI_ERROR_DEVICE_REMOVED
        #undef DXGI_ERROR_DEVICE_HUNG
        #undef DXGI_ERROR_DEVICE_RESET
        #undef DXGI_ERROR_WAS_STILL_DRAWING
        #undef DXGI_ERROR_FRAME_STATISTICS_DISJOINT
        #undef DXGI_ERROR_GRAPHICS_VIDPN_SOURCE_IN_USE
        #undef DXGI_ERROR_DRIVER_INTERNAL_ERROR
        #undef DXGI_ERROR_NONEXCLUSIVE
        #undef DXGI_ERROR_NOT_CURRENTLY_AVAILABLE
        #undef DXGI_ERROR_REMOTE_CLIENT_DISCONNECTED
        #undef DXGI_ERROR_REMOTE_OUTOFMEMORY
        #undef D3D11_ERROR_TOO_MANY_UNIQUE_STATE_OBJECTS
        #undef D3D11_ERROR_FILE_NOT_FOUND
        #undef D3D11_ERROR_TOO_MANY_UNIQUE_VIEW_OBJECTS
        #undef D3D11_ERROR_DEFERRED_CONTEXT_MAP_WITHOUT_INITIAL_DISCARD
        #undef D3D10_ERROR_TOO_MANY_UNIQUE_STATE_OBJECTS
        #undef D3D10_ERROR_FILE_NOT_FOUND
    #endif
#pragma endregion

#include <D3D11.h>

S'il vous plaît laissez-moi savoir ce que vous pensez et ne vous retenez pas de la critique.Je suis nouveau à cela et sachez que c'est une force assez brute et probablement risqué.

J'ai changé les paramètres et j'ai inclus le DirectX à partir de Kits Windows inside \ 8.0.

En fait, je voulais plutôt l'ignorer et utiliser les en-têtes et les bibliothèques de Windows que j'ai utilisés auparavant, mais peut-être que cela ne fait pas beaucoup de différence.

La seule chose est que maintenant je n'ai plus accès aux utilitaires D3DX.

Un autre correctif rapide - rapide, comme dans "probablement pas la meilleure solution à long terme" - consiste à modifier "Toolset de plate-forme" sous Solution / Propriétés / Généralités - dans mon cas spécifique j'ai sélectionné "Visual Studio 2015 - WindowsXP (v140_xp) "au lieu de" Visual Studio 2015 (v140) ".

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top