如题。要把程序转成64bit的,编译通过,警告都很少,但是一运行就出错,各位有没有做过的,给点建议。。我现在知道的有:
64bit long长度是64bit  指针长度也是64bit
编译器要用64bit的
预定义_WIN64
SetWindowLong要替换成SetWindowLongPtrMoveWindow(HWND,int,int,int,int,BOOL)这就执行不下去了,是不是因为我传了4个LONG 进去? 强制转换成int也不行。

解决方案 »

  1.   

    我知道的:最重要的是:指针长度64Bit,int型的是64Bit的。好像long的,在64位操作系统下还是32bit的。
      

  2.   

    那你和我看的不一样嘛,我看的是C++的内置类型,int不变,long变64位。。不过windows有int64这种东西的。。
      

  3.   

    int不变是一定错的,这个我是能肯定的。int的含义就是等于CPU的数据总线的长度指针的含义就是等于CPU的地址总线的长度因此,不同位的操作系统对上面这两个影响最大。
      

  4.   

    貌似我们两都错了,msdn上说int和long都是32bit的。。
    http://msdn.microsoft.com/en-gb/library/94z15h2c%28VS.80%29.aspx
      

  5.   

    INT32 
     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标准。
      

  6.   

    你看好标题撒。。这个是在64-Bit Programming with Visual C++ \ x64 Software Conventions  下面的,那必须是讲64位的
      

  7.   

    Common Visual C++ 64-bit Migration Issues When you use Visual C++ to create applications to run on a 64-bit Windows operating system, you should be aware of the following issues:    *      An int and a long are 32-bit values on 64-bit Windows operating systems. For programs that you plan to compile for 64-bit platforms, you should be careful not to assign pointers to 32-bit variables. Pointers are 64-bit on 64-bit platforms, and you will truncate the pointer value if you assign it to a 32-bit variable.
        *      size_t, time_t, and ptrdiff_t are 64-bit values on 64-bit Windows operating systems.
      

  8.   


    这个说的很清楚了:
    1、指针不要赋值给32位的变量。
    2、size_t,time_t and ptrdiff_t是64bits。可能你会问,为什么不说int?因为int类型是C语言内置关键字,C语言标准定义int类型和CPU的数据总线长度一致。---这个是C的标准,在任何编译器下都得执行。
    因此,很多编程规范里面曾经提过,不能滥用int类型,我以前在嵌入式平台写代码的时候,都不允许用int定义变量。
      

  9.   

    我最近编译x64时,有一大堆警告,主要是 size_t 的赋值
      

  10.   

    An int and a long are 32-bit values on 64-bit Windows operating systems.那这句话怎么理解。。
      

  11.   

    C标准没有定义int长度吧,这个是由编译器决定的。
      

  12.   

    lz:实在抱歉,是我错了。问了一个同事,应该是这样的:64位平台上的编译器对int尺寸有3种处理方式1. ILP : int, long, 和 pointer 都是 64bit。2. LP : int 是 32bit,long 和 pointer都是 64bit。3. LLP: int 和 long 都是 32bit,pointer 和 long long 是 64bit。VC 遵循 LLP 模式。大部分平台上的GCC都使用 LP 模式,但是Windows平台上的GCC(MinGW)遵循 VC,使用LLP。LZ你是对的,实在抱歉,误导你了感谢让我弄清楚了这个问题。