2010-01-29 3 views
2

Je suis en train de faire avancer notre projet à VS2008 de VS2005 et suis en cours d'exécution pour cette erreur de construction sur un projet MFC:Après avoir installé VS2008, je reçois une erreur de compilation dans winnt.h

C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\winnt.h(236) : error C2146: syntax error : missing ';' before identifier 'PVOID64' 

I J'ai pensé qu'il s'agissait d'un problème de SDK ou d'un problème de classement d'annuaire, comme certains forums l'ont suggéré, mais cela ne semble pas être le problème. Quelqu'un a-t-il déjà vu cela avant? Que devrais-je rechercher en essayant de suivre cela?

Je me demande également si j'ai besoin d'augmenter les drapeaux du préprocesseur WINVER dans stdafx de mon projet. Ils sont assez vieux:

#ifndef WINVER    
#define WINVER 0x0500  
#endif 

#ifndef _WIN32_WINNT   
#define _WIN32_WINNT 0x0500 
#endif      

#ifndef _WIN32_WINDOWS 
#define _WIN32_WINDOWS 0x0510 
#endif 

#ifndef _WIN32_IE   
#define _WIN32_IE 0x0500  
#endif 

Merci

Répondre

3

Cela se produit uniquement dans les projets qui incluent des fichiers d'inclusion DirectShow. Le problème est qu'il y a un Basetsd.h qui fait partie du SDK DirectShow qui est inclus avant l'inclusion de Basetsd.h du Kit de développement Windows. La version DirectShow ne définit pas POINTER_64 (car il est ancien) et provoque le problème que j'ai signalé.

La solution consiste à ajouter le répertoire include au SDK dans le paramètre d'ajout du projet incriminé. Comme dans:

"$(WindowsSdkDir)\include" 

Cela commencé à se produire après avoir mis à jour à VS2008 de VS2005 parce que précédemment, le SDK Include a été donnée comme:

"$(VCInstallDir)PlatformSDK\include" 

qui n'est plus l'emplacement du SDK de plate-forme VS2008

+0

J'ai le même problème en utilisant DirectShow et VS2008. BUt malheureusement, votre solution n'aide pas mon cas, même si j'ai installé des versions plus récentes de MS SDK 6.0, 7.0. Y a-t-il une suggestion? –

0

Vous devriez essayer de supprimer ces WinVer macros de votre stdafx.h. Ces versions (5.0 et 5.1) sont antérieures à Win64, donc elles n'ont probablement pas la déclaration pour PVOID64.

1

J'ai eu ce problème exact après l'installation VS2012RC (au lieu de VS2008 de la question) avec VS2005. La réponse de Karim est surtout juste sur le problème, mais sa solution n'a pas fonctionné pour moi. Heureusement, quelqu'un d'autre au travail avait déjà résolu ce problème.

Le problème semble être que le programme d'installation de VS a trouvé le SDK DirectX9 et l'a placé dans son fichier "properties" de répertoire par utilisateur. Le correctif qui fonctionne pour nous consiste donc à éditer le fichier de propriétés du répertoire de l'utilisateur (avec un éditeur de texte), à ​​supprimer toutes les références aux répertoires "dx90sdk", puis à recharger Visual Studio.

Le fichier en question semble se stockés à:

%USERPROFILE%\appdata\local\microsoft\msbuild\v4.0\Microsoft.Cpp.Win32.user.props 

Ce correctif peut très bien appliquer à la situaton de Karim aussi, lui permettant d'éviter d'utiliser les #include supplémentaires déclarations de préprocesseur.

Questions connexes