LNK2019未解析的外部符号SHGetFolderPathW

时间:2014-07-07 20:23:26

标签: c++ qt lnk2019

所以,

我遇到了一个奇怪的错误,我似乎无法找到解决方案。我在Qt Creator 3.1.1上编写了这段代码。代码是:

#include <ShlObj.h>
#include <string>
#include <vector>

static std::wstring GetUserDirectory()
{
    std::wstring returnPath;
    TCHAR path[MAX_PATH];
    HRESULT hr = SHGetFolderPath(NULL, CSIDL_COMMON_DOCUMENTS, NULL,
                                 SHGFP_TYPE_CURRENT, path);
    if (hr == S_OK)
    {
        returnPath = path;
        return returnPath;
    }
    else
    {
        return NULL;
    }
}

当我尝试构建程序时,我收到以下链接错误:

错误:LNK2019:未解析的外部符号__imp_SHGetFolderPathW在函数&#34中引用; public:static class std :: basic_string,class std :: allocator&gt; __cdecl FileUtils :: GetUserDirectory(void)&#34; (?GetUserDirectory @ @@ fileutils中SA?AV?$ basic_string的@ _WU?$ char_traits @ _W @ @@ STD V'$分配器@ _W @ @@ 2 STD @@ XZ)

错误:LNK1120:1个未解析的外部

我假设这些错误与上面的代码有关,因为根据我的理解,SHGetFolderPath只是SHGetFolderPathW的包装器。但是,我不确定为什么我会收到此错误。任何帮助将不胜感激。

谢谢,

1 个答案:

答案 0 :(得分:4)

这是因链接期间未包含正确的库而导致的Windows链接器错误。请阅读

的功能文档

http://msdn.microsoft.com/en-us/library/windows/desktop/bb762181%28v=vs.85%29.aspx

然后你会在底部看到你必须包括

  

Library:Shell32.lib

如果您使用的是Qt,那就意味着您必须将LIBS += lshell32添加到Qt项目文件中。