如题。要把程序转成64bit的,编译通过,警告都很少,但是一运行就出错,各位有没有做过的,给点建议。。我现在知道的有:
64bit long长度是64bit 指针长度也是64bit
编译器要用64bit的
预定义_WIN64
SetWindowLong要替换成SetWindowLongPtrMoveWindow(HWND,int,int,int,int,BOOL)这就执行不下去了,是不是因为我传了4个LONG 进去? 强制转换成int也不行。
64bit long长度是64bit 指针长度也是64bit
编译器要用64bit的
预定义_WIN64
SetWindowLong要替换成SetWindowLongPtrMoveWindow(HWND,int,int,int,int,BOOL)这就执行不下去了,是不是因为我传了4个LONG 进去? 强制转换成int也不行。
http://msdn.microsoft.com/en-gb/library/94z15h2c%28VS.80%29.aspx
int, long
4
Doubleword
这个表的意思是:对IN32等VC内部数据变量的解释,意思在C语言下对应int、long。并没有说在64位下,int、long也是32bit的。为了支持更好的移植性,在VC下编程使用INT32、INT64这样的定义是很好的一个习惯。这样的程序在32到64位平台移植不会有问题的。说穿了内部就是类似这样实现的:#if _WIN64
#define INT32 long
#else
#define INT32 int
#endif这样可以保证无论你在32位平台,64位平台,定义的数据类型都是你期望的位数,明显这样的实现对:申请内存的大小、字节对齐、位操作等来说是至关重要的。int绝对是64bit的。你说long在64位下是64位,我也有点疑惑,我印象long定义就是32bit的,这个是C标准。
* size_t, time_t, and ptrdiff_t are 64-bit values on 64-bit Windows operating systems.
这个说的很清楚了:
1、指针不要赋值给32位的变量。
2、size_t,time_t and ptrdiff_t是64bits。可能你会问,为什么不说int?因为int类型是C语言内置关键字,C语言标准定义int类型和CPU的数据总线长度一致。---这个是C的标准,在任何编译器下都得执行。
因此,很多编程规范里面曾经提过,不能滥用int类型,我以前在嵌入式平台写代码的时候,都不允许用int定义变量。