为什么URLDownloadToFile要加#pragma comment(lib, "urlmon.lib")才能运行

hiloves 2016-03-08 12:42:24
新建一个win32控制台项目:
#include "stdafx.h"
#include <stdio.h>
#include <tchar.h>


#include <windows.h>
#include <urlmon.h>
#pragma comment(lib, "urlmon.lib") //必须要加这一句,否则报错,为什么?

int _tmain(int argc, _TCHAR* argv[])
{
printf("URLDownloadToFile test function.\n");

TCHAR url[] = TEXT("http://google.com");

printf("Url: %S\n", url);

TCHAR path[MAX_PATH];

GetCurrentDirectory(MAX_PATH, path);

wsprintf(path, TEXT("%s\\index.html"), path);

printf("Path: %S\n", path);

HRESULT res = URLDownloadToFile(NULL, url, path, 0, NULL);

if (res == S_OK) {
printf("Ok\n");
}
else if (res == E_OUTOFMEMORY) {
printf("Buffer length invalid, or insufficient memory\n");
}
else if (res == INET_E_DOWNLOAD_FAILURE) {
printf("URL is invalid\n");
}
else {
printf("Other error: %d\n", res);
}

return 0;
}


如果不加这句:#pragma comment(lib, "urlmon.lib"),则会报错:error LNK2019: 无法解析的外部符号 _URLDownloadToFileW@20,该符号在函数 _wmain 中被引用。

可是在MFC项目中只要#include <urlmon.h>后就可以用URLDownloadToFile了,而且MSDN上也是说要加#include <urlmon.h>,并没有说要#pragma comment(lib, "urlmon.lib")。不知道为什么 ?
...全文
725 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
paschen 版主 2016-03-24
  • 打赏
  • 举报
回复 1
在项目属性——链接器——输入——附加依赖项中加入这个lib,就可以不用写那句了
赵4老师 2016-03-24
  • 打赏
  • 举报
回复
学会使用dumpbin
hiloves 2016-03-24
  • 打赏
  • 举报
回复
引用 2 楼 qq423399099 的回复:
补充一下: .h头文件,包含lib中说明输出的类或符号原型或数据结构。应用程序调用lib时,需要将该文件包含入应用程序的源文件中。 在静态库情况下,函数和数据被编译进一个二进制文件(通常扩展名为*.lib),Visual C++的编译器在链接过程中将从静态库中恢复这些函数和数据并把他们和应用程序中的其他模块组合在一起生成可执行文件,这个过程称为"静态链接"
你说的这都知道,就是不知道如果是MFC项目则不用#pragma comment(lib, "urlmon.lib"),而win32项目则要加。
小灸舞 2016-03-08
  • 打赏
  • 举报
回复
补充一下: .h头文件,包含lib中说明输出的类或符号原型或数据结构。应用程序调用lib时,需要将该文件包含入应用程序的源文件中。 在静态库情况下,函数和数据被编译进一个二进制文件(通常扩展名为*.lib),Visual C++的编译器在链接过程中将从静态库中恢复这些函数和数据并把他们和应用程序中的其他模块组合在一起生成可执行文件,这个过程称为"静态链接"
小灸舞 2016-03-08
  • 打赏
  • 举报
回复
#pragma comment(lib, "urlmon.lib")表示链接静态库到项目中 头文件很多只是一些声明,是编译阶段 而在链接阶段,是需要链接这些静态库,动态库的

64,282

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧