【问题标题】:Unable to call SHGetKnownFolderPath() even with #include <Shlobj.h> and #pragma comment (lib, "Shell32.lib")即使使用#include <Shlobj.h> 和#pragma 注释(lib,“Shell32.lib”)也无法调用 SHGetKnownFolderPath()
【发布时间】:2016-11-27 07:01:27
【问题描述】:

(Visual Studio 2010 / Visual C++ / Windows 7)

example.cpp:

#include <Shlobj.h>
#pragma comment (lib, "Shell32.lib")    
...
void example()
{
    SHGetKnownFolderPath(...) // undefined
}

我正在按照documentation 以及我在其他线程中看到的内容做所有事情,但它仍然不起作用。

【问题讨论】:

  • 什么意思?编译代码时会发生什么?当你运行它?为什么不将参数传递给它期望的函数?尝试向我们展示您的实际代码而不是伪代码。
  • 确切的错误是什么?您可能没有指定 Vista+。
  • @sgar91,我从经验中知道包括 .lib 是有效的。
  • @chris,错误 C3861:'SHGetKnownFolder':找不到标识符
  • 请永远不要说“它不起作用”。完整描述故障模式,包括逐字错误消息。

标签: c++ c visual-studio-2010 visual-c++ known-folders


【解决方案1】:

尝试在所有包含之前添加以下语句:

#define WINVER 0x0600
#define _WIN32_WINNT 0x0600

因为documentation 说它至少需要 Vista/2008。

【讨论】:

  • 您已经安装了 Windows 8。 Vista 是 0x0600,7(OP)是 0x0601。或者,还有_WIN32_WINNT_VISTA_WIN32_WINNT_WIN7
  • 是的,我放了最新的,我用的!
【解决方案2】:

我遇到了完全相同的问题。另一个具有相同代码和辅助文件(但包含不同)的项目正在运行。

#include &lt;Shlobj.h&gt; 放在文件顶部解决了问题。

但它可能无法复制,因为如果不这样做,它应该可以工作。可能是另一个 Visual Studio 错误。

【讨论】:

  • 如果更改包含的顺序似乎可以解决问题,则问题与所涉及的头文件有关(Shlobj.h 不是 Visual Studio 的一部分,顺便说一句.),或者在使用预编译的头文件时不遵守其他规则。当然不是 Visual Studio 中的错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-21
  • 1970-01-01
  • 2017-10-15
  • 2014-10-01
  • 2021-03-12
相关资源
最近更新 更多