#include <winsock.h>是什么意思, 它和#pragma comment(lib,"Ws2_32.lib") 有什么区别?

#include <winsock.h>是什么意思, 它和#pragma comment(lib,"Ws2_32.lib") 有什么区别?,第1张

#include <winsockh> //包含winsock这个头文件,内容是网络编程socket相关部分API

#pragma comment(lib,"Ws2_32lib") //这是链接API相关连的Ws2_32lib静态

一般是您删除东西不是在控制面板中卸载的,这样在开机启动中还有信息,您可以到开机启中看看有没有这个东西,有就去掉(另外就是某程序出了问题)。

请问原来不这样吧?如果是,出事前您在电脑上干了什么,下载什么了,什么东西有异常,如果想起什么追问我说说,如果您自己也不知怎么引起的,建议还原系统或重装。

Win7810还原系统,右击计算机选属性,在右侧选系统保护,系统还原,按步骤做就是了,如果有还原软件,自带的映像备份,并且进行了备份,也可以用软件、映像备份还原系统。

有问题请您追问我。

这句话的前面意思是静态加入一个lib文件,也就是库文件。

ws2_32lib文件,提供了对以下网络相关API的支持,若使用其中的API,则应该将ws2_32lib加入工程(否则需要动态载入ws2_32dll),这句话一般出现在网络编程中,需要使用网络API函数的时候,就必须使用这条语句加载ws2_32lib库或者动态载入ws2_32dll。

如果你加了这句,编译当前的单元时,linker会优先链接该preproccessor指定的lib文件,这样等于就告诉编译器有这样一个lib文件可以去链接。

如果你用mfc做开发,你可以点击菜单project-〉setting-〉link-〉object/library中添加这个静态库。

如果你用c语言,你需要通过 #pragma comment();命令来连接静态库,好像用到winsock2h中的API时要用到ws3_32lib。

这句话的前面意思是静态加入一个lib文件

也就是库文件

ws2_32lib文件,提供了对以下网络相关API的支持,若使用其中的API,则应该将ws2_32lib加入工程(否则需要动态载入ws2_32dll)。

这句话一般出现在网络编程中,需要使用网络API函数的时候,就必须使用这条语句加载ws2_32lib库或者动态载入ws2_32dll

楼上的乱解释,我简单给你解释一下什么是DELAYLOAD吧

一般情况下,直接用#pragma comment(linker, "WS2_32lib"),连接器在连接的时候,直接把该LIB对应的DLL加入到EXE的模块导入表中,这个表是在EXE执行之前由NTDLL模块去初始化的,各个模块的DLLMAIN会被执行,然后才轮到EXE代码执行;这里会有一个问题,如果这个DLL在EXE里并不一定会使用到,那么在初始化的时候就会浪费一些时间去初始化了

为了解决上述的问题,DELAYLOAD主出现了,注意它的用法是直接指定DLL名,而不是指定LIB名,使用了DELAYLOAD后,当且仅当你的EXE第一次调用到DLL里的函数的时候,这个DLL才会被LoadLibrary加载进EXE进程空间里,这个时候才进行DLL初始化;简单地说,DELAYLOAD就是用到的时候才加载,如果你的程序里走了其它分支,没有使用到ws2_32的API的时候,这个DLL是根本不会加载到进程空间里的

欢迎分享,转载请注明来源:浪漫分享网

原文地址:https://hunlipic.com/liwu/6822495.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-09-06
下一篇2023-09-06

发表评论

登录后才能评论

评论列表(0条)

    保存