SHGetFolderPath':找不到标识符

时间:2011-10-13 09:59:26

标签: c++ winapi directx

我正在使用DirectX 9 On Vs 2008 / windows7进行示例。 我收到了错误。

1> ------ Build build:Project:VideoCapture,配置:调试Unicode Win32 ------ 1 GT;编译...

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):警告C4244:'参数':从'int'转换为'WORD',可能丢失数据
1>。\ VideoCaptureDlg.cpp(1180):错误C2065:'SHGFP_TYPE_CURRENT':未声明的标识符
1>。\ VideoCaptureDlg.cpp(1180):错误C3861:'SHGetFolderPath':未找到标识符
1>。\ VideoCaptureDlg.cpp(1184):错误C2065:'SHGFP_TYPE_CURRENT':未声明的标识符
1>。\ VideoCaptureDlg.cpp(1184):错误C3861:'SHGetFolderPath':未找到标识符

我已经添加了shlobj.h和shell32.lib,但它仍然显示相同的错误。

我尝试在基于Windows 7和Internet Explorer 8的stdafx.h文件中更改以下宏的值,但它显示冲突“C1189:#error:_WIN32_WINNT设置与_WIN32_IE设置冲突”

//有关不同平台的相应值的最新信息,请参阅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

对此问题的任何建议都会有所帮助。

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

问题解决了这个问题。 我刚刚更改了项目属性下的预处理器设置 - &gt; C ++ - &GT;

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

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