我正在尝试将一些代码从 32 位 Windows(XP 和 Server 2003)迁移到 64 位 Windows 7,但我遇到了一个奇怪的 gethostbyname 问题。
我正在做这样的事情:
struct hostent *hp;
hp = gethostbyname( host );
调用 gethostbyname 后,指针 hp->h_addr_list 无效。它有所有正确的数字,但看起来一个 32 位指针不知何故塞进了错误的空间。
例如,我得到的是
hp->h_addr_list = 0x0064bdd800000000
如果我手动交换前半部分和后半部分,以便 hp->h_addr_list = 0x000000000064bdd8 则指针有效并指向正确的数据。
有时我也会得到 baadf00d 而不是零(即 hp->h_addr_list = 0x0064bdd8baadf00d),
据我所知,所有内容都链接到正确的 64 位版本的 winsock 库,所以我不确定是什么导致了这种问题。