关于getaddrinfo api源文件的编译

ggbond 2010-01-31 03:57:23
在msdn上查了此函数,我想编译,运行一下它的例程可是怎么都不成功。
目前编译已成功,连接仍出现如下问题:

--------------------Configuration: ddd - Win32 Debug--------------------
Linking...
dddd.obj : error LNK2001: unresolved external symbol __imp__freeaddrinfo@4
dddd.obj : error LNK2001: unresolved external symbol __imp__getaddrinfo@16
Debug/ddd.exe : fatal error LNK1120: 2 unresolved externals
执行 link.exe 时出错.

ddd.exe - 1 error(s), 0 warning(s)


源代码如下:
#include <windows.h>
#include <winsock2.h>
#include <ws2tcpip.h>
#include <stdio.h>

//link with Ws2_32.lib

int __cdecl main(int argc, char **argv)
{

//-----------------------------------------
// Declare and initialize variables
WSADATA wsaData;
int iResult;

DWORD dwRetval;

int i = 1;

char *port = "27015";

struct addrinfo *result = NULL;
struct addrinfo *ptr = NULL;
struct addrinfo hints;


// Validate the parameters
if (argc != 2) {
printf("usage: %s <hostname>\n", argv[0]);
printf(" getaddrinfo provides protocol-independent translation\n");
printf( " from an ANSI host name to an IP address\n");
printf(" %s www.contoso.com\n", argv[0]);
return 1;
}
// Initialize Winsock
iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);
if (iResult != 0) {
printf("WSAStartup failed: %d\n", iResult);
return 1;
}

//--------------------------------
// Setup the hints address info structure
// which is passed to the getaddrinfo() function
ZeroMemory( &hints, sizeof(hints) );
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
hints.ai_protocol = IPPROTO_TCP;


//--------------------------------
// Call getaddrinfo(). If the call succeeds,
// the result variable will hold a linked list
// of addrinfo structures containing response
// information
dwRetval = getaddrinfo(argv[1], port, &hints, &result);
if ( dwRetval != 0 ) {
printf("getaddrinfo failed with error: %d\n", dwRetval);
WSACleanup();
return 1;
}

printf("getaddrinfo returned success\n");

// Retrieve each address and print out the hex bytes
for(ptr=result; ptr != NULL ;ptr=ptr->ai_next) {

printf("getaddrinfo response %d\n", i++);
printf("\tFlags: 0x%x\n", ptr->ai_flags);
printf("\tFamily: ");
switch (ptr->ai_family) {
case AF_UNSPEC:
printf("Unspecified\n");
break;
case AF_INET:
printf("AF_INET (IPv4)\n");
break;
case AF_INET6:
printf("AF_INET6 (IPv6)\n");
break;
case AF_NETBIOS:
printf("AF_NETBIOS (NetBIOS)\n");
break;
default:
printf("Other %ld\n", ptr->ai_family);
break;
}
printf("\tSocket type: ");
switch (ptr->ai_socktype) {
case 0:
printf("Unspecified\n");
break;
case SOCK_STREAM:
printf("SOCK_STREAM (stream)\n");
break;
case SOCK_DGRAM:
printf("SOCK_DGRAM (datagram) \n");
break;
case SOCK_RAW:
printf("SOCK_RAW (raw) \n");
break;
case SOCK_RDM:
printf("SOCK_RDM (reliable message datagram)\n");
break;
case SOCK_SEQPACKET:
printf("SOCK_SEQPACKET (pseudo-stream packet)\n");
break;
default:
printf("Other %ld\n", ptr->ai_socktype);
break;
}
printf("\tProtocol: ");
switch (ptr->ai_protocol) {
case 0:
printf("Unspecified\n");
break;
case IPPROTO_TCP:
printf("IPPROTO_TCP (TCP)\n");
break;
case IPPROTO_UDP:
printf("IPPROTO_UDP (UDP) \n");
break;
default:
printf("Other %ld\n", ptr->ai_protocol);
break;
}
printf("\tLength of this sockaddr: %d\n", ptr->ai_addrlen);
printf("\tCanonical name: %s\n", ptr->ai_canonname);
}

freeaddrinfo(result);
WSACleanup();

return 0;
}


另外我补充几点,我用的系统是xp_sp3,开发工具是vc6,
而且在连接器中已经加了Ws2_32.lib.

希望大牛相助。。。先谢谢!
...全文
168 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
ggbond 2010-02-01
  • 打赏
  • 举报
回复
解决了,在link中的吧sdk中的lib也包含了就可以了
谢谢大家的相助。
zgl7903 2010-01-31
  • 打赏
  • 举报
回复
参考下我的博客文章
http://blog.csdn.net/zgl7903/archive/2009/09/26/4595918.aspx
ggbond 2010-01-31
  • 打赏
  • 举报
回复
大牛帮帮忙啊!
ggbond 2010-01-31
  • 打赏
  • 举报
回复
那个Ws2_32.dll如何导入啊?如何改才能使得连接时成功呢?
希望能说的再明白一点。。。
fox000002 2010-01-31
  • 打赏
  • 举报
回复
The getaddrinfo function was added to the Ws2_32.dll on Windows XP and later


VC6 中的 Ws2_32.lib 是不可能有这两个符号的
精锐掷矛手 2010-01-31
  • 打赏
  • 举报
回复
MSDN上:OS Versions: Windows CE .NET 4.1 and later
是不是操作系统的问题?

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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