《Windows程序设计》(第五版,北大出版社)里提到
 窗口过程函数返回类型LRESULT其实就是简单数据类型
 LONG,但是我在另一本书上看到这样的程序:
 long WINAPI WndProc(....) 请问在Windows编程中,LONG与long有区别吗?
 为什么LRESULT CALLBACK WndProc(.....)
 可以改写成long WINAPI WndProc(....)?

解决方案 »

  1.   

    long 与LONG 没有区别
    至于WINAPI与CALLBACK的本质,看看在windef.h中的定义就清楚了,
    #undef far
    #undef near
    #undef pascal#define far
    #define near
    #if (!defined(_MAC)) && ((_MSC_VER >= 800) || defined(_STDCALL_SUPPORTED))
        #define pascal __stdcall
    #else
        #define pascal
    #endif#if defined(DOSWIN32) || defined(_MAC)
        #define cdecl _cdecl
        #ifndef CDECL
            #define CDECL _cdecl
        #endif
    #else
        #define cdecl
        #ifndef CDECL
            #define CDECL
        #endif
    #endif#ifdef _MAC
        #define CALLBACK PASCAL
        #define WINAPI CDECL
        #define WINAPIV CDECL
        #define APIENTRY WINAPI
        #define APIPRIVATE CDECL
        #ifdef _68K_
            #define PASCAL __pascal
        #else
            #define PASCAL
        #endif
    #elif (_MSC_VER >= 800) || defined(_STDCALL_SUPPORTED)
            #define CALLBACK __stdcall
            #define WINAPI __stdcall
            #define WINAPIV __cdecl
            #define APIENTRY WINAPI
            #define APIPRIVATE __stdcall
            #define PASCAL __stdcall
        #else
            #define CALLBACK
            #define WINAPI
            #define WINAPIV
            #define APIENTRY WINAPI
            #define APIPRIVATE
            #define PASCAL pascal
    #endif
      

  2.   

    一样的,它这样定义是为了可以移植,long是c语言有的东西,在32位机上是4位,在windows上它不直接用这个,以后要是64位了,说不定LRESULT就不是long了。