This was answered some time ago on StackOverflow:
DWORD_PTR, INT_PTR, LONG_PTR, UINT_PTR, ULONG_PTR When, How and Why?[
^]
They have nothing to do with a single compiled object
running on both 32 and 64 bit platforms (except for huge arrays as noted in the reference), they just allow the compiler to use the correct size storage for pointers when compiling for 32 bit or 64 bit platforms. The source code doesn't need to change, the compiler does
"the right thing".