Visual c++ 静态链接Winsock?

Visual c++ 静态链接Winsock?,visual-c++,winsock,compilation,Visual C++,Winsock,Compilation,我在我的项目中使用Winsock 1.1。我在“附加依赖项”中包含了wsock32.lib 我正在使用depends.exe查看DLL项目,注意DLL依赖于wsock32.DLL。如何静态链接它,使它不依赖于wsock32.dll?简而言之,您不能。没有静态winsock库,只能调用wsock32.dll。与无法静态链接到user32或kernel32的方式大致相同。wsock32.dll内部的某些东西在不同版本的Windows上必然不同,甚至在相同版本的Windows上也会有不同的servic

我在我的项目中使用Winsock 1.1。我在“附加依赖项”中包含了
wsock32.lib


我正在使用
depends.exe
查看DLL项目,注意DLL依赖于
wsock32.DLL
。如何静态链接它,使它不依赖于
wsock32.dll

简而言之,您不能。没有静态winsock库,只能调用wsock32.dll。与无法静态链接到user32或kernel32的方式大致相同。wsock32.dll内部的某些东西在不同版本的Windows上必然不同,甚至在相同版本的Windows上也会有不同的service Pack,因此静态链接会有点像噩梦


wsock32.dll存在于安装了TCP/IP的所有版本的Windows上,但具有相同的接口,因此静态链接不会带来任何好处。

简单的回答是,您不能。没有静态winsock库,只能调用wsock32.dll。与无法静态链接到user32或kernel32的方式大致相同。wsock32.dll内部的某些东西在不同版本的Windows上必然不同,甚至在相同版本的Windows上也会有不同的service Pack,因此静态链接会有点像噩梦


wsock32.dll存在于安装了TCP/IP的所有版本的Windows上,但具有相同的接口,因此静态链接不会带来任何好处。

Winsock并不总是存在。如果您想支持非常旧的Windows 95计算机,这些计算机没有安装TCP/IP,它们也没有winsock.dll等。您可能仍然会在技术或工业设置中看到类似的计算机,它们需要维修。有一次,我不得不将一整盘CD送去销毁,因为我假设所有计算机上都有winsock dll;如果操作系统未安装TCP/IP,则无论您是否使用DLL,您对与TCP/IP相关的Winsock所做的任何操作都将无效,除非您正在安装自己的TCP/IP实现。如果您仅出于可选目的使用TCP/IP,但系统也必须能够在没有TCP/IP的情况下运行,然后,应用程序依赖于TCP/IP的存在就成了一个问题。我们的申请是针对小学的,并且在很长一段时间内一直完美无瑕。然后,我们添加了通过TCP/IP发送/接收信息的功能,突然,支持热线开始亮起。。。应用程序未启动,因为我们的exe文件依赖于winsock.dll。。。我们必须废弃所有剩余的CD,并将应用程序更改为动态加载winsock。很好的一点,我可以看出这将是一个问题。但是,静态链接Winsock仍然不会带来任何好处,因为它最终会尝试使用不存在的TCP/IP堆栈,这会使系统崩溃。不过,我会更新我的答案以反映这一点。Winsock并不总是存在。如果您想支持非常旧的Windows 95计算机,这些计算机没有安装TCP/IP,它们也没有winsock.dll等。您可能仍然会在技术或工业设置中看到类似的计算机,它们需要维修。有一次,我不得不将一整盘CD送去销毁,因为我假设所有计算机上都有winsock dll;如果操作系统未安装TCP/IP,则无论您是否使用DLL,您对与TCP/IP相关的Winsock所做的任何操作都将无效,除非您正在安装自己的TCP/IP实现。如果您仅出于可选目的使用TCP/IP,但系统也必须能够在没有TCP/IP的情况下运行,然后,应用程序依赖于TCP/IP的存在就成了一个问题。我们的申请是针对小学的,并且在很长一段时间内一直完美无瑕。然后,我们添加了通过TCP/IP发送/接收信息的功能,突然,支持热线开始亮起。。。应用程序未启动,因为我们的exe文件依赖于winsock.dll。。。我们必须废弃所有剩余的CD,并将应用程序更改为动态加载winsock。很好的一点,我可以看出这将是一个问题。但是,静态链接Winsock仍然不会带来任何好处,因为它最终会尝试使用不存在的TCP/IP堆栈,这会使系统崩溃。不过,我会更新我的答案以反映这一点。