请问怎么用GetAdaptersInfo函数得到当前IP地址?

huhu0013 2008-11-27 12:05:05

我想用GetAdaptersInfo函数得到电脑当前IP地址。

于是在MSDN中查到它的原型如下:

DWORD GetAdaptersInfo(
PIP_ADAPTER_INFO pAdapterInfo, // buffer to receive data
PULONG pOutBufLen // size of data returned
);

进一步查到IP_ADAPTER_INFO结构如下:

typedef struct _IP_ADAPTER_INFO {
struct _IP_ADAPTER_INFO* Next;
DWORD ComboIndex;
char AdapterName[MAX_ADAPTER_NAME_LENGTH + 4];
char Description[MAX_ADAPTER_DESCRIPTION_LENGTH + 4];
UINT AddressLength;
BYTE Address[MAX_ADAPTER_ADDRESS_LENGTH];
DWORD Index;
UINT Type;
UINT DhcpEnabled;
PIP_ADDR_STRING CurrentIpAddress;
IP_ADDR_STRING IpAddressList;

IP_ADDR_STRING GatewayList;
IP_ADDR_STRING DhcpServer;
BOOL HaveWins;
IP_ADDR_STRING PrimaryWinsServer;
IP_ADDR_STRING SecondaryWinsServer;
time_t LeaseObtained;
time_t LeaseExpires;
} IP_ADAPTER_INFO, *PIP_ADAPTER_INFO;


我用CurrentIpAddress输出当前IP,结果总是失败:

printf("%s", pAdapterInfo->CurrentIpAddress->IpAddress.String);

然后又试了用IpAddressList输出,结果是成功的:

printf("%s", pAdapterInfo->IpAddressList.IpAddress.String);


从名字来看,CurrentIpAddress就是当前IP了,

为什么用它来输出当前IP却会失败呢?

CurrentIpAddress和IpAddressList是什么区别啊?


...全文
138 点赞 收藏 4
写回复
4 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
glacier3d 2008-11-27
msdn上都说PIP_ADDR_STRING CurrentIpAddress是保留变量,为什么还要用呢?
用IpAddressList不能满足需求?
回复
huhu0013 2008-11-27

好像不是UNICODE字符串的问题,

而是对这两个成员的理解不准确。

知道它们含义的朋友帮看看。
回复
healer_kx 2008-11-27
PIP_ADDR_STRING
你要确定这个类型是不是UNICODE的,我印象里面某库WinpCap,都是UNICODE字符串了。
回复
huhu0013 2008-11-27

我去官网核对过了,

官网MSDN上查到的是这样的:

CurrentIpAddress
Reserved.

看来是我的MSDN有些老了。

多谢你提醒了。
回复
相关推荐
发帖
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
帖子事件
创建了帖子
2008-11-27 12:05
社区公告

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