2010-01-29 58 views
2

我試圖從VS2005搬過來我們的項目到VS2008編譯錯誤和我這個生成錯誤的MFC項目在運行:安裝VS2008後,我得到了WINNT.H

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

我認爲這是一個SDK問題或包括目錄順序問題,因爲一些論壇已經建議,但這似乎不是問題。有沒有人見過這個?試圖追蹤這件事時,我應該尋找什麼?

我也想知道是否需要增加項目stdafx中的WINVER預處理器標誌。他們是很老:

#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

這隻發生在包含DirectShow包含文件的項目中。問題是在包含Windows SDK的Basetsd.h之前,有一個Basetsd.h是DirectShow SDK的一部分。 DirectShow版本沒有定義POINTER_64(因爲它是舊的),然後導致我報告的問題。

解決方案是在違規項目的添加包含設置中將include目錄添加到SDK。如:

"$(WindowsSdkDir)\include" 

這開始發生後,我升級從VS2005到VS2008,因爲在此之前,SDK include指令給出:

"$(VCInstallDir)PlatformSDK\include" 

,因此不再在VS2008平臺SDK的位置

+0

我有使用DirectShow和VS2008相同的問題。不幸的是,你的解決方案不能幫助我的情況,即使我已經安裝了更新的MS SDK版本6.0,7.0。有什麼建議嗎? – 2013-05-26 15:55:58

0

你應該嘗試從您的stdafx.h消除這些WINVER宏。這些版本(5.0和5.1)早於Win64,因此它們可能沒有PVOID64的聲明。

1

在VS2005安裝VS2012RC(而不是問題的VS2008)後,我有這個確切的問題。卡里姆的回答大多是對的,但他的解決方案對我來說並不合適。幸運的是,這裏的其他人已經解決了這個問題。

問題似乎是VS安裝程序找到了DirectX9 SDK並將其放入其每個用戶目錄的「屬性」文件中。因此,適用於我們的修復方法是編輯用戶的目錄屬性文件(使用文本編輯器),刪除對「dx90sdk」目錄的所有引用,然後重新加載Visual Studio。

問題中的文件似乎是讓存儲在:

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

此修復程序很可能適用於卡里姆的situaton過,這讓他避免使用額外的#include預處理語句。

相關問題