После установки VS2008 я получаю ошибку компиляции в winnt.h - PullRequest
2 голосов
/ 29 января 2010

Я пытаюсь перенести наш проект на VS2008 с VS2005 и работаю с этой ошибкой сборки в проекте MFC:

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

Я подумал, что это проблема SDK или проблема с порядком включения в каталог, как предлагали некоторые форумы, но, похоже, это не проблема. Кто-нибудь видел это раньше? Что я должен искать при попытке отследить это?

Мне также интересно, нужно ли мне увеличивать флаги препроцессора WINVER в stdafx моего проекта. Они довольно старые:

#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

Спасибо

Ответы [ 3 ]

3 голосов
/ 02 февраля 2010

Это происходит только в проектах, которые включают в себя файлы DirectShow. Проблема в том, что существует Basetsd.h, который является частью DirectShow SDK, который включается до включения Windows SDK Basetsd.h. Версия DirectShow не определяет POINTER_64 (потому что она старая), а затем вызывает проблему, о которой я сообщил.

Решение состоит в том, чтобы добавить каталог включения в SDK в настройке добавления включенного проекта нарушающего проекта. Как в:

"$(WindowsSdkDir)\include"

Это начало происходить после того, как я обновил VS2008 до VS2005, потому что ранее директива включения SDK была задана как:

"$(VCInstallDir)PlatformSDK\include"

который больше не является местоположением SDK платформы в VS2008

1 голос
/ 26 июня 2012

У меня возникла именно эта проблема после установки VS2012RC (вместо вопроса VS2008) с VS2005. Ответ Карима в основном прав насчет проблемы, но его решение не помогло мне. К счастью, кто-то еще на работе уже исправил эту проблему.

Проблема заключается в том, что установщик VS нашел пакет DirectX9 SDK и поместил его в файл свойств своего каталога для каждого пользователя. Таким образом, исправление, которое работает для нас, состоит в том, чтобы отредактировать файл свойств каталога пользователя (с помощью текстового редактора), удалить все ссылки на каталоги «dx90sdk», а затем перезагрузить Visual Studio.

Файл, о котором идет речь, хранится по адресу:

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

Это исправление может очень хорошо применяться и к ситуации Карима, что позволяет ему избегать использования дополнительных #include операторов препроцессора.

0 голосов
/ 29 января 2010

Вы должны попытаться удалить эти WINVER макросы из вашего stdafx.h. Эти версии (5.0 и 5.1) предшествуют Win64, поэтому они, вероятно, не имеют объявления для PVOID64.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...