2011-10-13 117 views
1

我正在使用DirectX 9在Vs 2008/windows7上進行示例。 我收到錯誤消息。SHGetFolderPath':標識符未找到

1> ------構建開始:項目:VideoCapture,配置:Unicode的調試的Win32 ------ 1>編譯...

1> VideoCaptureDlg.cpp
1> \ VideoCaptureDlg.cpp(169):錯誤C2065:SHGFP_TYPE_CURRENT':未聲明的標識符
1> \ VideoCaptureDlg.cpp(169):錯誤C3861: '的SHGetFolderPath':標識符沒有找到
1> \ VideoCaptureDlg.cpp (173):錯誤C2065:'SHGFP_TYPE_CURRENT':未聲明的標識符
1>。\ VideoCaptureDlg.cpp(173):錯誤C3861:'SHGetFolderPath':標識符未找到 1>。\ VideoCaptureDlg.cpp(1025):Warning C4244:'argument':從'int'轉換爲'WORD',可能丟失數據
1>。\ VideoCaptureDlg.cpp(1180):error C2065: 'SHGFP_TYPE_CURRENT':未聲明的標識符
1> \ VideoCaptureDlg.cpp(1180):錯誤C3861: '的SHGetFolderPath':錯誤C2065: 'SHGFP_TYPE_CURRENT':未找到
1> \ VideoCaptureDlg.cpp(1184)標識符未申報標識符
1> \ VideoCaptureDlg.cpp(1184):錯誤C3861: '的SHGetFolderPath':未找到

我已經加入SHLOBJ.H和SHELL32.LIB以及仍然是示出了相同的錯誤標識符。

我試圖改變以下基於Windows 7和Internet Explorer 8中的stdafx.h文件中的宏的價值卻是露出衝突「C1189:#錯誤:與_WIN32_IE設置_WIN32_WINNT設置衝突」

//參考MSDN獲取有關不同平臺相應值的最新信息。

#ifndef WINVER // Allow use of features specific to Windows XP or later.  
#define WINVER 0x0501 // Change this to the appropriate value to target other versions of Windows.  
#endif  

#ifndef _WIN32_WINNT // Allow use of features specific to Windows XP or later.  
#define _WIN32_WINNT 0x0601 // Change this to the appropriate value to target other versions of Windows.  
#endif  

#ifndef _WIN32_WINDOWS // Allow use of features specific to Windows 98 or later.  
#define _WIN32_WINDOWS 0x0410 // Change this to the appropriate value to target Windows Me or later.  
#endif  

#ifndef _WIN32_IE // Allow use of features specific to IE 6.0 or later.  
#define _WIN32_IE 0x0800 // Change this to the appropriate value to target other versions of IE.  
#endif 

對此問題的任何建議都會有幫助。

+0

stdafx.h中是啊,我設立之前的任何包含文件 –

+0

感動評論基於什麼觸發錯誤回答。 – Richard

回答

0

該問題已解決問題。 我只是改變了預處理下,項目屬性設置 - > C++ - >

之前,它是
_WINDOWS; WINVER =的0x0400; DEBUG; _DEBUG; _WIN32_WINNT = 0x400的; WIN32; UNICODE

我改成了
_WINDOWS; WINVER =爲0x0600; DEBUG; _DEBUG; _WIN32_WINNT = 0x600; WIN32; UNICODE

2

是來自MSDN的代碼塊還是您的stdafx.h?我只是將宏設置爲與條件無關(要覆蓋以前的設置)。還要確保你在包含之前設置它們(特別是windows.h)。

望着錯誤消息來自(線sdkddkver.h 263),其中:

#if ((_WIN32_WINNT < _WIN32_WINNT_WIN2K) && (_WIN32_IE > _WIN32_IE_IE60SP1)) 
#error _WIN32_WINNT settings conflicts with _WIN32_IE setting 
#endif 

你覺得你的方式設置這些宏。

編輯(按評論):

我會開始stdafx.h文件(並確保是總是第一頭;這是需要有效的預編譯頭以及):

#define WINVER 0x0601  // Kernel 6.1 == Windows 7/Server 2008 R2 
#define _WIN32_WINNT WINVER 
#define _WIN32_IE 0x0800 // IE8 

#define NOMINMAX   // Don't define min and max (prefer C++ lib) 
+0

看到我的問題是這個錯誤「錯誤C3861:'SHGetFolderPath':標識符未找到」。我搜索了網絡,發現根據目標系統改變這些宏的值解決了問題。這就是爲什麼我改變了值,正在給衝突。對原始錯誤的任何建議 –

+0

更改宏*是解決原始錯誤的方法。 – Puppy

+0

@DeadMg宏將會有什麼值.OS是Windows 7,IE是IE 8 –