InternetOpen导致链接器错误LNK1120和LNK2001

时间:2018-02-23 02:39:34

标签: c++ winapi linker visual-studio-2017

编辑以显示与this的差异:

这个问题具体是通过使用Visual Studio 2017界面对项目进行修改来解决“未解析的外部符号”。它针对的是那些没有必要在常规上编写C ++代码的人。基础,因此不关心C ++编译如何工作的细微差别。

TL; DR - 这可以提供一个简洁的解决方案,解决链接库与VS2017接口的问题,而无需关注未解析符号的细微差别。解决方案位于底部。

我正在接受恶意软件逆向工程课程,以下函数调用给VS2017带来了一些麻烦。

handle_t iOpenH = InternetOpen(L"Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) totally not Malware",
INTERNET_OPEN_TYPE_PRECONFIG,
NULL,
NULL,
0); 

错误:

Severity    Code    Description                                       Project           File                                                         

Error      LNK1120  1 unresolved externals                              fake-malware    C:\Users\darrel\Documents\school\Spring 2018\COMP 220 - Software Rev Eng\Lab4\Lab4_Win32_API\Release\fake-malware.exe   line: 1 
Error      LNK2001  unresolved external symbol __imp__InternetOpenW@20  fake-malware    C:\Users\darrel\Documents\school\Spring 2018\COMP 220 - Software Rev Eng\Lab4\Lab4_Win32_API\fake-malware.obj           line: 1

我已经清理并重建无济于事。我该怎么做才能解决上面的两个错误?

编辑2:我刚才意识到这里答案的内在含义很简单但不是我以前意识到的对这种开发没什么经验的东西,所以我会在这里说明,以防你不这样做想要关注下面@Anders的链接来解决这个问题:

当您使用诸如Win32 API之类的库时,您不仅需要执行标准#include <headerName.h>,而且链接器可能需要.lib来存储相应的库。在我们使用wininet的情况下。因此,如下面注释中的链接表中所述,标头包含#include <wininet.h>,链接器要求您将wininet.lib添加到链接器的附加依赖项列表中:

项目&gt; Proerties&gt;配置属性&gt;链接器&gt;输入&gt;附加依赖性&gt;将必要的.lib文件名添加到列表中。

1 个答案:

答案 0 :(得分:3)

确保链接到Wininet.lib。

Add it to your project settings或将#pragma comment(lib,"Wininet.lib")添加到您的某个源文件中。