c++ - SHGetFolderPath: 未找到标识符

  显示原文与译文双语对照的内容
0 0

我正在使用 vs 2008/windows7. 上的DirectX 9进行采样,我收到错误。

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 ): 警告 C4244: '参数': 从中转换'int'到'单词'可能丢失数据
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和 IE 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

关于这个问题的任何建议都将是 helpfull 。

时间: 原作者:

0 0

是来自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 0

问题解决了。 我刚更改了项目 Properties--> C++> 下的预处理器设置

在那之前
_WINDOWS ;WINVER=0x0400 ;调试;_DEBUG ;_WIN32_WINNT=0x400 ;WIN32 ;UNICODE

我把它改成
_WINDOWS ;WINVER=0x0600 ;调试;_DEBUG ;_WIN32_WINNT=0x600 ;WIN32 ;UNICODE

原作者:
...