无法定位程序输入点 inet_ntop 于动态链接库 WS2_32.dll上

本文介绍了一种解决在debug版本中遇到的'无法定位程序输入点inet_ntop于动态链接库WS2_32.dll上'的问题方法。通过在项目属性中启用/OPT:REF选项来移除未使用的函数引用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

搜索了一下工程里, 根本没有使用到inet_ntop这个函数, 但是debug版运行的时候提示这个错误

无法定位程序输入点 inet_ntop 于动态链接库 WS2_32.dll上


解决方法: 项目-属性-链接器-优化-引用-选择   是(/OPT:REF),  就可以OK了

/OPT:REF 将消除从未引用过的函数和/或数据, 而/OPT:NOREF 则保留从未引用过的函数和/或数据。


分析下面代码,检查在VS2022中是否有误并给出完整代码 #include "stdafx.h" #include <stdio.h> #include <stdlib.h> #include <winsock2.h> #include <iphlpapi.h> #include <ws2tcpip.h> #pragma comment(lib, "ws2_32.lib") #pragma comment(lib, "iphlpapi.lib") // 功能一:解析域名的 IP 地址 void ResolveDomainNames(const char** domains, int count) { WSADATA wsaData; if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) { fprintf(stderr, "WSAStartup failed.\n"); return; } for (int i = 0; i < count; i++) { struct hostent* host = gethostbyname(domains[i]); if (host == NULL) { fprintf(stderr, "Failed to resolve %s: %d\n", domains[i], WSAGetLastError()); continue; } printf("IP addresses for %s:\n", domains[i]); for (int j = 0; host->h_addr_list[j] != NULL; j++) { struct in_addr addr; addr.s_addr = *(u_long*)host->h_addr_list[j]; printf("%s\n", inet_ntoa(addr)); } } WSACleanup(); } // 功能二:获取并输出本地主机的网络适配器信息 void PrintAdapterInfo() { PIP_ADAPTER_INFO pAdapterInfo; PIP_ADAPTER_INFO pAdapter = NULL; DWORD dwRetVal = 0; ULONG ulOutBufLen = sizeof(IP_ADAPTER_INFO); // 分配内存 pAdapterInfo = (IP_ADAPTER_INFO*)malloc(sizeof(IP_ADAPTER_INFO)); if (pAdapterInfo == NULL) { fprintf(stderr, "Error allocating memory needed to call GetAdaptersInfo\n"); return; } // 如果缓冲区不够大,重新分配内存 if (GetAdaptersInfo(pAdapterInfo, &ulOutBufLen) == ERROR_BUFFER_OVERFLOW) { free(pAdapterInfo); pAdapterInfo = (IP_ADAPTER_INFO*)malloc(ulOutBufLen); if (pAdapterInfo == NULL) { fprintf(stderr, "Error allocating memory needed to call GetAdaptersInfo\n"); return; } } // 获取适配器信息 if ((dwRetVal = GetAdaptersInfo(pAdapterInfo, &ulOutBufLen)) == NO_ERROR) { pAdapter = pAdapterInfo; while (pAdapter) { printf("Adapter Name: %s\n", pAdapter->AdapterName); printf("IP Address: %s\n", pAdapter->IpAddressList.IpAddress.String); printf("Subnet Mask: %s\n", pAdapter->IpAddressList.IpMask.String); printf("Gateway: %s\n", pAdapter->GatewayList.IpAddress.String); printf("MAC Address: "); for (int i = 0; i < pAdapter->AddressLength; i++) { if (i == (pAdapter->AddressLength - 1)) printf("%.2X\n", (int)pAdapter->Address[i]); else printf("%.2X-", (int)pAdapter->Address[i]); } printf("\n"); pAdapter = pAdapter->Next; } } else { fprintf(stderr, "GetAdaptersInfo failed with error: %d\n", dwRetVal); } // 释放内存 if (pAdapterInfo) free(pAdapterInfo); } int _tmain(int argc, _TCHAR* argv[]) { // 功能一:解析多个域名的 IP 地址 const char* domains[] = { "www.163.com", "www.swust.edu.cn" }; int domainCount = sizeof(domains) / sizeof(domains[0]); printf("Resolving domain names...\n"); ResolveDomainNames(domains, domainCount); // 功能二:获取并输出本地主机的网络适配器信息 printf("\nPrinting local adapter information...\n"); PrintAdapterInfo(); return 0; }
03-21
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值