首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

编译64位程序数据类型转换有关问题

2013-01-28 
编译64位程序数据类型转换问题我的环境是这样的,通过XP+cygwin+VS2008+SDK+DDK等搭建的一个编译环境,环境

编译64位程序数据类型转换问题
我的环境是这样的,通过XP+cygwin+VS2008+SDK+DDK等搭建的一个编译环境,环境变量的设置是通过.sh脚本写的,因为最近需要用在64位PC上,用64位浏览器调用原先写的几个控件,在编译其中一个控件的时候,出现了一个类型转换的问题(原先编译成32位程序的时候没有出现过)下面我贴下问题代码:
LRESULT lRes;
SendMessageTimeout( hWndChild, nMsg, 0L, 0L, SMTO_ABORTIFHUNG, 1000, (DWORD*)&lRes );
报错的是error C2664: SendMessageTimeoutA第七个参数不对,按照提示用reinterpret_cast来进行转换还是不能解决,谁是否有这方面的解决经验?
(编译环境,link工具等都没有问题,环境变量都已经引用64位所需要的库等)
[解决办法]
实际情况就是
SendMessageTimeout只会返回给一个DWORD的值!而楼主需要一个LRESULT值。
在64位的情况下,DWORD是装不下LRESULT值的。

所以楼主需要自己决定, 
1. 如果确定楼主需要的LRESULT的取值范围不会超过DWORD的上限的话,可以这样


LRESULT lRes;
DWORD dwRes;

SendMessageTimeout( hWndChild, nMsg, 0L, 0L, SMTO_ABORTIFHUNG, 1000, &dwRes);
lRes = dwRes;

HRESULT hr;
hr = (*pfObjectFromLresult)(lRes, IID_IHTMLDocument, 0, (void**)&spDoc );


2. 否则的话,不能用这种SendMessageTimeout的方法返回处理结果,需要其他的方法!
[解决办法]
对学习编程者的忠告:
眼过千遍不如手过一遍!
书看千行不如手敲一行!
手敲千行不如单步一行!
单步源代码千行不如单步对应汇编一行!

热点排行