首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么C++ WinInet函数未解析外部符号?

为什么C++ WinInet函数未解析外部符号?
EN

Stack Overflow用户
提问于 2018-03-15 01:03:33
回答 2查看 849关注 0票数 1

我是一个被迫做一些C++的Java程序员。真是一场噩梦!我试图向这样的web服务发送一个帖子请求:

代码语言:javascript
复制
#include <Windows.h>
#include <tchar.h>
#include <WinInet.h>

    static TCHAR hdrs[] = _T("Content-Type: application/x-www-form-urlencoded");
    static TCHAR frmdata[] = _T("id=01&message=test_message");
    static LPCSTR accept[2] = { "*/*", NULL };
    static LPCWSTR tag = L"MyAgent";
    static LPCWSTR requestType = L"POST";

// for clarity, error-checking has been removed
HINTERNET hSession = InternetOpen(tag, INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
HINTERNET hConnect = InternetConnect(hSession, _T("desktop-60nl2pl:9998"), INTERNET_DEFAULT_HTTP_PORT, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 1);
HINTERNET hRequest = HttpOpenRequest(hConnect, requestType, _T("/GUser/login"), NULL, NULL, (LPCWSTR*)accept, 0, 1);
HttpSendRequest(hRequest, hdrs, strlen((char*)hdrs), frmdata, strlen((char*)frmdata));

该代码基于以下发布:https://social.msdn.microsoft.com/Forums/sqlserver/en-US/dc74e7bf-3ac9-41a0-b1c7-ece14a76a906/send-post-request-to-simple-php-page-using-wininet?forum=vcgeneral

它编译但不链接。获取这些“函数中引用的未解析外部符号_imp_InternetOpenW”类std::vector

对不起,如果这是一个新的问题,但我不能理解所有的gobbldygook,我读到的链接错误。有人能用简单的术语来解释吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-03-15 01:17:33

博士,你在链接器选项中缺少了一个库。

.cpp.exe是一个两步操作。第一步是编译,将.cpp转换为.obj。第二步是将.obj转换为.exe的链接。

当您的程序变得足够大,需要两个或多个.cpp文件时,分两个步骤这样做的原因非常明显。您可以单独编译每个.cpp,然后将两个.obj链接在一起。这大大减少了您的迭代时间,特别是当您有大约100个.cpp文件并且只更改其中一个文件时。

在链接阶段,链接器还包括各种库。大多数真正常见的™都是自动包含的,所以一切都是“正确的”,这是一个合理的百分比。然而,使用较少的链接库,例如,默认情况下不包括网络库,并且需要在链接器选项中显式命名。

幸运的是,微软让追踪他们变得相当容易。取其中一个未定义的函数名,“取消修饰”,以获得原始的函数名称,例如InternetOpen,然后GoogleforInternetOpen msdn。第一个链接将带您到这里:https://msdn.microsoft.com/en-us/library/windows/desktop/aa385096(v=vs.85).aspx,如果您一直滚动到底部,就会有一个Requirements部分。在这里列出了您想要的库:wininet.lib,所以您所要做的就是在Project Properties下的Linker选项的Input页面的Additinal Dependencies字段中显式地命名它,您应该做得很好。

您正在为此使用,对吗?

票数 1
EN

Stack Overflow用户

发布于 2018-03-15 01:25:25

您正在引用诸如InternetOpen之类的函数,但它们没有在代码中定义。必须与您的代码链接的Win32库中的活动。在本例中,所有InternetXXXX函数都位于WinInet.lib静态库和WinInet.dll动态链接库中。您必须链接到WinINet.lib,程序才能编译。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49289998

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档