MSDN 上的所有 Winsock2 示例都表明我必须将 Winsock2 库静态链接为:
#pragma comment(lib, "ws2_32.lib")
Run Code Online (Sandbox Code Playgroud)
确保构建环境链接到 Winsock 库文件 ?>Ws2_32.lib。使用 Winsock 的应用程序必须与 Ws2_32.lib >库文件链接。#pragma 注释向链接器表明需要 Ws2_32.lib > 文件。
但为什么我使用它而不是简单地加载Windows中现有的Ws2_32.dll(自Windows 2003以来,据我了解,根据MSDN https://learn.microsoft.com/en-us/windows/win32/api/winsock2/的要求nf-winsock2-recv )
所以我可以使用这样的东西:
typedef int WSAAPI(WINAPI* recv_func)(SOCKET s, char *buf, int len, int flags);
HINSTANCE hGetProcIDDLL = LoadLibraryA("ws2_32.dll");
my_recv = (recv_func)GetProcAddress(hGetProcIDDLL, "recv");
Run Code Online (Sandbox Code Playgroud)
或者我可以只使用 Winsock2.h 标头并使用 /MD 标志编译程序:
include <winsock2.h>
//#pragma comment(lib, "ws2_32.lib")
Run Code Online (Sandbox Code Playgroud)
是否可以?我可以像第一个示例一样使用 /MD 或动态加载 ws2_32.dll ,而不将 ws2_32.lib 静态链接到我的应用程序,因为自 Win2003 以来的所有 Windows 都在 System32 文件夹中包含 ws2_32.dll ?