如何移植32位C#工程到64位的XP或者VISTA下?
2006-06-20 19:59
344 查看
首先让我们庆幸的是,WIN32的API还在,虽然VISTA下出来了WPF来替代它。在64为下所有的API都照常用,但是还是应该注意几点:
1、据柄和指针都扩展成64为了,这没有什么要说的,要不然64如何体现?所以不可避免的,我们得把32下的项目关于据柄和指针地方调整一下,以前大多数人都用int来代替据柄或者指针,为了向后兼容最好现在都改成IntPtr类型,这样以后也就没有太多后顾之忧了,因为在64位下IntPtr也相应会扩展成64位。
2、试和IntPtr相关,因为它的扩展,势必对你当前项目造成不小的影响,尤其“(int)IntPtr“这种写法,这样很容易造成堆栈的溢出,尤其在我们鼠标消息处理中,Message.LParam是个IntPtr,我们通常的做法用LoWord和HiWord取坐标信息,今天奇怪的发现,64位中的LParam的低32位放着坐标信息,高32位的信息不知道何用,很纳闷,今天为了移植我只好强行把高32位清空为0,要不然直接转肯定有溢出,我愿意为MS留了这地方为以后扩展,但是,在我调试当中发现会莫名奇怪的有些数据,只能以后慢慢探索了。
3、在微软的CSDN上查到size_t也扩展了,不过我在移植的中间还没有发现这个问题,希望大家也都注意一下。
上面是我今天的一点心得,希望你能用得上,谢谢您的光顾!
如果有什么错误的地方,希望大家也指出来!
wangweixing2000
1、据柄和指针都扩展成64为了,这没有什么要说的,要不然64如何体现?所以不可避免的,我们得把32下的项目关于据柄和指针地方调整一下,以前大多数人都用int来代替据柄或者指针,为了向后兼容最好现在都改成IntPtr类型,这样以后也就没有太多后顾之忧了,因为在64位下IntPtr也相应会扩展成64位。
2、试和IntPtr相关,因为它的扩展,势必对你当前项目造成不小的影响,尤其“(int)IntPtr“这种写法,这样很容易造成堆栈的溢出,尤其在我们鼠标消息处理中,Message.LParam是个IntPtr,我们通常的做法用LoWord和HiWord取坐标信息,今天奇怪的发现,64位中的LParam的低32位放着坐标信息,高32位的信息不知道何用,很纳闷,今天为了移植我只好强行把高32位清空为0,要不然直接转肯定有溢出,我愿意为MS留了这地方为以后扩展,但是,在我调试当中发现会莫名奇怪的有些数据,只能以后慢慢探索了。
3、在微软的CSDN上查到size_t也扩展了,不过我在移植的中间还没有发现这个问题,希望大家也都注意一下。
上面是我今天的一点心得,希望你能用得上,谢谢您的光顾!
如果有什么错误的地方,希望大家也指出来!
wangweixing2000
相关文章推荐
- C# 如何判断系统是32位还是64位
- Visual Studio 32位64位的问题和如何编译32位64位工程的问题
- 如何移植32位程序到64位系统
- XP工程移植Vista上找不到msxml.dll错误
- C#如何判断操作系统位数是32位还是64位
- C#中调用c++的dll如何适应32位跟64位的平台
- [转]C#如何判断操作系统位数是32位还是64位
- XP工程移植Vista上找不到msxml.dll错误
- 教你如何查看自己操作系统是32位还是64位?XP系统【转】
- C++,CLR,C#的DLL和EXE的32位程序,如何在64位系统上使用
- 如何移植32位程序到64位系统
- C# 如何判断系统是32位还是64位
- C#获取32位或者64位系统安装软件信息
- 如何移植32位程序到64位系统
- 如何移植32位程序到64位系统
- 如何移植32位程序到64位系统
- C# 如何判断系统是64位还是32位【轉】
- C# 写的32位COM组件,如何在64位系统上注册
- 32位USB设备驱动工程移植64位编译(用到vdw_wdm.lib)
- C# 如何判断系统是64位还是32位