As described in this MSDN article, Microsoft has these two type annotations to declare native pointers on different architectures. However, on the second line:
On a 32-bit system, a pointer declared with __ptr64 is truncated to a 32-bit pointer. On a 64-bit system, a pointer declared with __ptr32 is coerced to a 64-bit pointer.
This sounds to me like the declaration doesn't matter; if the architecture overrides the declaration of __ptrXX to be the default anyways, what's the point of marking __ptrXX in the first place?
I see that this answer says that it's for interop, but if the declarations are essentially overridden as above, how does that help with interop?