问题与64位Windows的gethostbyname
-
23-09-2019 - |
题
我试图从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),
据我可以告诉一切都被链接到winsock的库的正确的64位版本,所以我不知道什么可能会导致这样那样的问题。
解决方案
您可能需要使用getaddrinfo()
而尝试。该文档进行的gethostbyname 指出的是,它的用法不鼓励,并且它现在弃用(所以有可能是错误的话)。我还没有与你有,但我知道的代码,我有一个使用getaddrinfo()
可以跨XP精细通过Windows 7 x86和x64问题的经验。
其他提示
baadf00d 是使用微软以指示未初始化分配的堆存储器中,从而归零表示出来是可能是一个好主意。测试以确保。
至于交换高低位,你的权利,但没有得到放进错误的地方。错误?
我遇到了同样的问题。问题是,在项目设置为结构成员对齐选项设置为4个字节(/ ZP4)。我回到这个选项为默认,这解决了问题。
不隶属于 StackOverflow