ulong_ptr

场景:ULONG_PTR终究是什么

ULONG_PTR到底是什么?
看到PTR想当然就把它当指针了, 但是它的定义是下面这样的, _W64是什么意思? Debug的监视窗口显示的类型是unsigned long,  望高手指点下。

typedef _W64 unsigned long ULONG_PTR


------解决方案--------------------
继续查找_W64。

从ULONG_PTR本身来看,应该是一个无符号long型指针。
U = unsigned
LONG = long
PTR = pointer

所以,ULONG_PTR就是 unsigned long *,GDI+中好像就是这么定义的。
------解决方案--------------------
1. ULONG_PTR 只是专门用于内核程序 (Kernel 或 Device Driver) 使用的数据类型,
   当作指针时它应当指向系统内核地址空间 (因此最高位为 1),另外它还可当作偏移量。
2.
定义:
ULONG_PTR

Unsigned LONG_PTR.
This type is declared in Basetsd.h as follows:

#if defined(_WIN64)
typedef unsigned __int64 ULONG_PTR;
#else
typedef unsigned long ULONG_PTR;

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winprog/winprog/windows_data_types.asp 
------解决方案--------------------
无符号(u) 长整型(long) 指针(ptr)
------解决方案--------------------
引用:
1. ULONG_PTR 只是专门用于内核程序 (Kernel 或 Device Driver) 使用的数据类型,
   当作指针时它应当指向系统内核地址空间 (因此最高位为 1),另外它还可当作偏移量。
2.
定义:
ULONG_PTR

Unsigned LONG_PTR.
This type is declared in Basetsd.h as follows:

#i……


从定义字面理解就是:unsigned long *类型
------解决方案--------------------
引用:
看到PTR想当然就把它当指针了, 但是它的定义是下面这样的, _W64是什么意思? Debug的监视窗口显示的类型是unsigned long,  望高手指点下。
C/C++ code

typedef _W64 unsigned long ULONG_PTR


ULONG_PTR表示64位无符号整形。。。通常用来存放64位地址。。。
------解决方案--------------------
x64中unsigned long是32位的,因此用_w64报警
实际上有
#if defined(_WIN64)
    typedef __int64 INT_PTR, *PINT_PTR;
    typedef unsigned __int64 UINT_PTR, *PUINT_PTR;

    typedef __int64 LONG_PTR, *PLONG_PTR;
    typedef unsigned __int64 ULONG_PTR, *PULONG_PTR;

    #define __int3264   __int64

#else
    typedef _W64 int INT_PTR, *PINT_PTR;
    typedef _W64 unsigned int UINT_PTR, *PUINT_PTR;

    typedef _W64 long LONG_PTR, *PLONG_PTR;
    typedef _W64 unsigned long ULONG_PTR, *PULONG_PTR;

    #define __int3264   __int32

#endif
#endif 

x64下ULONG_PTR是64位的,x86下ULONG_PTR是32位的,目的就是保证和指针一样大