获得LNK2001但智能感知可以找到功能

Kin*_*TiX 0 c++ windows winapi linker visual-studio-2015

在VS2015中构建项目时出现以下链接错误:

LNK2001未解析的外部符号__imp__PathCombineW @ 12

函数PathCombineW来自shlwapi.h,我已将其包含在我的标题中.我发现这个令人困惑的部分是Intellisense很好地解析了这个函数,我可以在函数上"查看定义",它使我在shlwapi.h中的声明正确.

如果我尝试使用pathcch.h中的任何函数,我会遇到同样的问题.我最初使用此API,因为它似乎是更新的首选路径操作API.但是,我使用任何一个API获得了相同的LNK2001.

我无法弄清楚它是否与我所包含的其他标题有关.它们列在下面:

// daqServiceTray.cpp 
#include "stdafx.h"
#include "daqServiceTray.h"    
#include <Shlwapi.h>
#include <Shellapi.h>
#include <Strsafe.h>


//stdafx.h
#pragma once
#include "targetver.h"
#define WIN32_LEAN_AND_MEAN
#ifndef _UNICODE
#define _UNICODE
#endif
#ifndef UNICODE
#define UNICODE
#endif
#include <windows.h>


//targetver.h
#pragma once
#define WINVER 0x0601
#define _WIN32_WINNT 0x0601
#include <SDKDDKVer.h>


//dayServiceTray.h
#pragma once
#include "resource.h"
Run Code Online (Sandbox Code Playgroud)

Resource.h是我的UI资源文件的标题.我正在将它们构建到win32 GUI应用程序中.我正在开发Windows 7.

通过错误阅读帮助我感觉我通过使用来自两个不同平台版本的代码引起了一些冲突,但是我在弄清楚可能存在的冲突时遇到了很多麻烦.在我尝试进行一些路径操作并添加了pathcch.h或shlwapi.h之前,应用程序正在构建并运行OK.

为什么intellisense能够通过链接器找到函数对我说一个未解析的外部?它能找到函数定义的库吗?我的订单是否包含问题?

我的核心问题是双重的:

intellisense如何找到函数,但链接器不能?

如果问题是找不到函数的定义,我怎样才能知道为目标平台编写应用程序需要包含哪些库(Windows 7)?我在MSDN上获取此信息时遇到了很多麻烦.是否有某种高级教程或页面解释了不同平台的构建规范的细微差别?

the*_*heB 5

IntelliSense如何找到该功能但链接器不能?

链接器正在寻找.lib文件,IntelliSense只是使用标头.要生成可执行文件(编译+链接),您需要两者.

如果问题是找不到函数的定义,我怎样才能知道为目标平台编写应用程序需要包含哪些库(Windows 7)?

文档PathCombine底部有一个很好的表,它说明了函数定义的头,以及链接器链接函数所需的库.

对于PathCombine表格如下:

+----------------------------------------------------------------------------------------+
| Minimum supported client  |  Windows 2000 Professional, Windows XP [desktop apps only] |
+----------------------------------------------------------------------------------------+
| Minimum supported server  |  Windows 2000 Server [desktop apps only]                   |
+----------------------------------------------------------------------------------------+
| Header                    |  Shlwapi.h                                                 |
+----------------------------------------------------------------------------------------+
| Library                   |  Shlwapi.lib                                               |
+----------------------------------------------------------------------------------------+
| DLL                       |  Shlwapi.dll (version 4.71 or later)                       |
+----------------------------------------------------------------------------------------+
| Unicode and ANSI names    |  PathCombineW (Unicode) and PathCombineA (ANSI)            |
+----------------------------------------------------------------------------------------+

阅读此图表告诉我们要获得此功能,我们想要使用

#include <Shlwapi.h>
Run Code Online (Sandbox Code Playgroud)

并添加Shlwapi.lib到链接器的库列表.它还告诉我们,如果我们想动态调用函数,我们可以调用LoadLibrary并传递Shlwapi.dll给它,然后GetProcAddress用来查找PathCombineAPathCombineW函数.