又让64位给捉弄了一回
来源:互联网 发布:黑莓 知乎 编辑:程序博客网 时间:2024/05/08 15:41
又让64位给捉弄了一回
昨天把一个 vc6 下的程序移植到 vc2005 里,用了一上午时间总算是把环境配置,语法不兼容的问题都抹平了。编译通过,调试运行基本正常。然而,直接双击运行,就崩溃掉了。。
通过调用堆栈知道问题出在网络代码方面,最后确定到函数 GetAdaptersInfo 上。
DWORD GetAdaptersInfo(
PIP_ADAPTER_INFO pAdapterInfo,
PULONG pOutBufLen
);
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;
在 vc6 下 time_t 是 32 位的,而 vc2005 里默认是 64 位的。
所以 GetAdaptersInfo 这个只支持 32 位的函数返回的数据长度就不对了。
程序编译没有问题,但是运行的时候,对LeaseExpires的访问就出现了不确定性,因为它已经超出 GetAdaptersInfo 所识别的范围了。
MSDN 上说:
On Windows XP and later: Use the GetAdaptersAddresses function instead of GetAdaptersInfo.
但是 GetAdaptersAddresses 无法获取 DHCP分配ip的时间和过期的时间,所以还是得用 GetAdaptersInfo 函数。
在 vc2005 下,一种方法是定义 _USE_32BIT_TIME_T 来强制程序使用 32 位时间,但可能会不太兼容 64 位的系统。另一种方法就是用 __time32_t 替换 time_t 。
参考:
http://msdn.microsoft.com/en-us/library/aa365917(VS.85).aspx
http://msdn.microsoft.com/en-us/library/aa365915(v=VS.85).aspx
http://social.msdn.microsoft.com/forums/en-US/vcgeneral/thread/fe17ff48-71e4-401b-9982-84addb809eea
- 又让64位给捉弄了一回
- 又白痴了一回...
- 又被IIC驱动折腾了一回
- 诺基亚又被微软耍了一回
- 又被IIC驱动折腾了一回
- 又一回
- 又让惯性思维给玩了一把
- 又到了票贩子发一回的机会了
- 一回来又恢复了往日的无聊生活
- 还有人用JBuilder9吗? 又被恶心了一回
- C语言运算符优先级让我郁闷了一回
- Google又有新东西出来了~~做一回google宣传大使
- 圈地运动了一回
- 也飞了一回
- 1147: 爱国了一回
- 1147 爱国了一回
- 是人生捉弄了自己,还是自己辜负了人生?
- 让部长给说了
- java.lang.NoClassDefFoundError: com/ibm/disthub2/spi/ClientTranslatejava.lang.NoClassDefFoundError: com/ibm/disthub2/spi/ClientT
- 模拟Windows Mobile平台
- #pragma once与#ifndef
- 啥时候我们也能扣押小日本的渔船呀,等等
- 屋顶雕饰
- 又让64位给捉弄了一回
- 两个文件的内容匹配(1)
- 2010/09/14am多表练习
- JQuery弹出层插件jquery-msgbox
- effective c++ 条款21: 尽可能使用const
- tomcat的JNDI数据源绑定
- 互联网周刊咋么了呢?
- 几个不错的Flex学习网站
- (div+css)上下固定中间自适应高度网页布局的实现(FF,IE)